825 votes

Obtenir la première clé dans un tableau associatif (éventuellement) ?

Quelle est la meilleure façon de déterminer la première clé dans un tableau associatif peut-être ? Ma première pensée il à foreach juste le tableau et ensuite immédiatement rompre, comme ceci :

Ayant ainsi $key contient la première clé, mais il semble inefficace. Quelqu'un a-t-il une meilleure solution ?

1430voto

Blixt Points 23266

Vous pouvez utiliser reset et key:

reset($array);
$first_key = key($array);

C'est essentiellement le même que votre code initial, mais avec un peu moins de frais généraux, et il est plus évident de ce qui se passe.

Rappelez-vous juste d'appeler reset, ou vous pouvez obtenir toutes les clés dans le tableau. Vous pouvez également utiliser end au lieu de reset pour obtenir la dernière touche.

Si vous vouliez la clé pour obtenir la première valeur, reset renvoie en fait:

$first_value = reset($array);

Il y a un cas spécial à surveiller (donc vérifier la longueur du tableau en premier):

$arr1 = array(false);
$arr2 = array();
var_dump(reset($arr1) === reset($arr2)); // bool(true)

86voto

troelskn Points 51966

retourne un tableau des clés. Prendre la première entrée. Vous pouvez également appeler sur le tableau et par la suite `` . Cette dernière approche est probablement légèrement plus rapide (Thoug je n’a pas le tester), mais il a pour effet secondaire de remise à zéro du pointeur interne.

55voto

Webmut Points 168

Curieusement, la boucle foreach est en fait le moyen le plus efficace de le faire.

Depuis l'OP a demandé spécifiquement au sujet de l'efficacité, il convient de rappeler que toutes les réponses sont en fait beaucoup moins efficace qu'un foreach.

J'ai fait un test avec php 5.4, et le reset/clé pointeur de méthode (réponse) semble être d'environ 7 fois plus lent qu'un foreach. D'autres approches de la manipulation de l'ensemble de la matrice (array_keys, array_flip) sont évidemment encore plus lente que ça et devenir bien pire lorsque l'on travaille avec un grand tableau.

Foreach n'est pas efficace à tous, n'hésitez pas à l'utiliser!

39voto

jimyi Points 13032

``vous donnera la première clé

modifier par Blixt : vous devez appeler avant pour réinitialiser le pointeur au début du tableau.

20voto

Sergiy Points 1552
list($firstKey) = array_keys($yourArray);

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