J'ai un tableau:
$list = array('string1', 'string2', 'string3');
Je veux obtenir l'index pour une valeur donnée (c'est-à-dire 1
pour string2
et 2
pour string3
)
Tout ce que je veux, c'est la position des chaînes dans le tableau
Comment y parvenir?
array_search
est le moyen de le faire.
array_search ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) : mixed
De la docs :
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array); // $key = 1;
Vous pouvez parcourir le tableau manuellement et trouver l'index, mais pourquoi le faire s'il existe une fonction pour cela. Cette fonction retourne toujours une clé et fonctionnera bien avec les tableaux associatifs et normaux.
Si vous n'en faites que quelques-unes (et/ou si la taille du tableau est grande), alors vous étiez sur la bonne piste avec array_search:
$list = array('string1', 'string2', 'string3');
$k = array_search('string2', $list); //$k = 1;
Si vous voulez tous (ou beaucoup d’entre eux), une boucle vous fera probablement mieux:
foreach ($list as $key => $value) {
echo $value . " in " . $key . ", ";
}
// Prints "string1 in 0, string2 in 1, string3 in 2, "
// ou en considérant votre structure de tableau:
$array = array(
'string1' => array('a' => '', 'b' => '', 'c' => ''),
'string2' => array('a' => '', 'b' => '', 'c' => ''),
'string3' => array('a' => '', 'b' => '', 'c' => ''),
);
// tu pourrais juste
function findIndexOfKey($key_to_index,$array){
return array_search($key_to_index,array_keys($array));
}
// réalisé
print "\r\n//-- Method 1 --//\r\n";
print '#index of: string1 = '.findIndexofKey('string1',$array)."\r\n";
print '#index of: string2 = '.findIndexofKey('string2',$array)."\r\n";
print '#index of: string3 = '.findIndexofKey('string3',$array)."\r\n";
// alternativement
print "\r\n//-- Method 2 --//\r\n";
print '#index of: string1 = '.array_search('string1',array_keys($array))."\r\n";
print '#index of: string2 = '.array_search('string2',array_keys($array))."\r\n";
print '#index of: string3 = '.array_search('string3',array_keys($array))."\r\n";
// récursivement
print "\r\n//-- Method 3 --//\r\n";
foreach(array_keys($array) as $key => $value){
print '#index of: '.$value.' = '.$key."\r\n";
}
// les sorties
//-- Method 1 --//
#index of: string1 = 0
#index of: string2 = 1
#index of: string3 = 2
//-- Method 2 --//
#index of: string1 = 0
#index of: string2 = 1
#index of: string3 = 2
//-- Method 3 --//
#index of: string1 = 0
#index of: string2 = 1
#index of: string3 = 2
D'autres personnes ont suggéré array_search()
qui donne la clé de l'élément de tableau où se trouve la valeur. Vous pouvez vous assurer que les clés de tableau sont des entiers contigus en utilisant array_values()
:
$list = array(0=>'string1', 'foo'=>'string2', 42=>'string3');
$index = array_search('string2', array_values($list));
print "$index\n";
// result: 1
Vous avez dit dans votre question que array_search()
était inutile. Pouvez-vous expliquer pourquoi? Qu'avez-vous essayé et comment n'a-t-il pas répondu à vos besoins?
Le problème est que vous n'avez pas d'index numérique sur votre tableau.
Utiliser array_values () créera un tableau indexé à zéro que vous pourrez ensuite rechercher à l'aide de array_search () sans avoir à utiliser une boucle for.
$list = array('string1', 'string2', 'string3');
$index = array_search('string2',array_values($list));
Ce code devrait faire la même chose que votre nouvelle routine, en travaillant avec le bon tableau multidimensionnel.
$arr = array(
'string1' => array('a' => '', 'b' => '', 'c' => ''),
'string2' => array('a' => '', 'b' => '', 'c' => ''),
'string3' => array('a' => '', 'b' => '', 'c' => '')
);
echo 'Index of "string2" = '. array_search('string2', array_keys($arr));
Essayez la fonction array_keys PHP.
$key_string1 = array_keys($list, 'string1');
Pourriez-vous être un peu plus précis?
$key = array_search('string2',$list)
fonctionne bien pour moi. Essayez-vous d'accomplir quelque chose de plus complexe?
$find="Topsite";
$list=array("Tope","Ajayi","Topsite","Infotech");
$list_count=count($list);
sort($list);
for($i=0;$i<$list_count;$i++)
{
if($list[$i]==$find){
$position=$i;
}
}
echo $position;
array_search devrait fonctionner correctement, vient de tester ceci et il renvoie les clés comme prévu:
$list = array('string1', 'string2', 'string3');
echo "Key = ".array_search('string1', $list);
echo " Key = ".array_search('string2', $list);
echo " Key = ".array_search('string3', $list);
Ou pour l'index, vous pouvez utiliser
$list = array('string1', 'string2', 'string3');
echo "Index = ".array_search('string1', array_merge($list));
echo " Index = ".array_search('string2', array_merge($list));
echo " Index = ".array_search('string3', array_merge($list));