161 votes

php - obtenir l'index numérique d'un tableau associatif

J'ai un tableau associatif et j'ai besoin de trouver la position numérique d'une clé. Je pourrais parcourir le tableau manuellement pour la trouver, mais existe-t-il une meilleure méthode intégrée à PHP ?

$a = array(
  'blue'   => 'nice',
  'car'    => 'fast',
  'number' => 'none'
);

// echo (find numeric index of $a['car']); // output: 1

291voto

Fosco Points 20573
echo array_search("car",array_keys($a));

5 votes

PHP garantit-il l'ordre d'un tableau associatif ?

7 votes

@KevinBurke Il ne va pas les réorganiser à moins que vous n'utilisiez une fonction de tri. Je ne suis pas sûr du type de garantie que vous recherchez, mais ce n'est pas comme le modèle JavaScript où il n'y a pas d'ordre statique pour les tableaux associatifs.

6 votes

Les index donnés par "array_keys" ne correspondront pas nécessairement à l'index du tableau d'origine. Par exemple, si vous avez modifié le tableau en utilisant "unset" ou un certain nombre d'autres fonctions, il y aura un vide dans l'index du tableau original, mais array_keys produira un nouveau tableau.

37voto

quantumSoup Points 6565
$blue_keys = array_search("blue", array_keys($a));

http://php.net/manual/en/function.array-keys.php

2voto

Andrey Vorobyev Points 370
function arrayValuePosition($value, $array)
{
    return array_search($value, array_keys($array));
}

2voto

user363878 Points 1
  $a = array(
      'blue' => 'nice',
      'car' => 'fast',
      'number' => 'none'
  );  
var_dump(array_search('car', array_keys($a)));
var_dump(array_search('blue', array_keys($a)));
var_dump(array_search('number', array_keys($a)));

0voto

n00b Points 2492

Une solution que j'ai trouvée... probablement assez inefficace en comparaison avec la solution de Fosco :

 protected function getFirstPosition(array$array, $content, $key = true) {

  $index = 0;
  if ($key) {
   foreach ($array as $key => $value) {
    if ($key == $content) {
     return $index;
    }
    $index++;
   }
  } else {
   foreach ($array as $key => $value) {
    if ($value == $content) {
     return $index;
    }
    $index++;
   }
  }
 }

3 votes

Oui, PHP a des milliers de fonctions intégrées pour une bonne raison. Celles-ci sont généralement beaucoup plus rapide que la logique équivalente écrite à la longue en code PHP.

3 votes

C'est probablement plus rapide que array_search qui fait d'abord un tri et qui est donc douloureusement lent.

0 votes

Ah, mais le code intégré est précompilé, et la recherche sera très probablement une recherche binaire (en supposant qu'il trie les éléments en premier).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X