web-dev-qa-db-fra.com

Récupère la valeur d'index d'un tableau dans PHP

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

  • chaîne1 est 0
  • chaîne2 est 1
  • string3 vaut 2

Comment y parvenir?

56

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.

129
RaYell

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, "
15
ircmaxell

// 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
8
Michael Hurley

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?

8
Bill Karwin

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));
5
Brian Berneker

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));
1
Vex

Essayez la fonction array_keys PHP.

$key_string1 = array_keys($list, 'string1');
1
Evernoob

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?

1
Jeff
$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;
0
Ajayi Temitope

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));
0
Vex