Si vous n'en savez pas assez sur le tableau (vous ne savez pas si la première clé est foo ou bar ), alors le tableau pourrait aussi être, peut-être, vide .
Il serait donc préférable de vérifier, surtout s'il y a une chance que la valeur retournée soit le booléen FALSE:
$value = empty($arr)? $default : reset($arr);
Le code ci-dessus utilise resetet a donc des effets secondaires (il réinitialise le pointeur interne du tableau), vous pouvez donc préférer utiliser array_slicepour accéder rapidement à une copie du premier élément du tableau:
Si le tableau n'est pas vraiment grand, vous n'avez pas réellement besoin array_sliceet pouvez plutôt obtenir une copie de l'ensemble du tableau de clés, puis obtenez le premier élément:
$key = count($arr)? array_keys($arr)[0]:null;
Si vous avez un très grand tableau, cependant, l'appel à array_keysnécessitera beaucoup plus de temps et de mémoire array_slice(les deux fonctions parcourent le tableau, mais ce dernier se termine dès qu'il a rassemblé le nombre requis d'éléments - qui est un).
Une exception notable est lorsque vous avez la première clé qui pointe vers un objet très volumineux et alambiqué. Dans ce cas array_slice, vous dupliquerez ce premier gros objet, tandis que vous array_keysne saisiriez que les clés.
PHP 7.3
PHP 7.3 implémente array_key_first()ainsi que array_key_last(). Celles-ci sont explicitement fournies pour accéder efficacement aux première et dernière clés sans réinitialiser l'état interne du tableau comme effet secondaire.
Ainsi, en PHP 7.3, la première valeur de $arraypeut être accédée avec
$array[array_key_first($array)];
Vous feriez quand même mieux de vérifier que le tableau n'est pas vide, sinon vous obtiendrez une erreur:
$firstKey = array_key_first($array);if(null=== $firstKey){
$value ="Array is empty";// An error should be handled here}else{
$value = $array[$firstKey];}
@AhmedShefeer eh bien, l'autre réponse n'est pas seulement celle acceptée, mais elle est là depuis huit ans de plus . Je ramasse en quelque sorte les miettes ici :-D. Mais merci pour le vote de confiance!
LSerni
1
Il me semble que c'est la meilleure réponse, car la seule autre non obsolète qui donne à la fois la clé et la valeur est la boucle foreach abandonnée, ce qui est gênant. Les autres réponses ne donnent que la valeur sans la clé.
sootsnoot
1
J'ai adoré cette approche moderne et mise à jour avec le temps.
sanjeet bisht
@LSerni Je ne sais pas si vous êtes toujours actif, mais j'étais coincé et ce message bien expliqué et mis à jour m'a sauvé. Merci
izk
@izk je suis toujours actif! :-D
LSerni
44
Fausse boucle qui se brise lors de la première itération:
Parce que la solution se trouve dans votre première ligne de code, mais que vous continuez à écrire une autre ligne totalement inutile.
markus
21
réinitialiser ne rendra pas la clé
HarryFink
3
+1 pour la «fausse boucle». J'ai eu besoin de récupérer la clé et la valeur des premiers éléments, sans passer par chaque élément. La reset()fonction ne récupérerait que la première valeur.
Phil Cross
2
+1 pour la fausse boucle également, je dois garder la clé, donc la réinitialisation n'était pas une option
isJustMe
25
Il y a quelques options. array_shift()renverra le premier élément, mais supprimera également le premier élément du tableau.
$first = array_shift($array);
current() retournera la valeur du tableau sur lequel pointe son pointeur de mémoire interne, qui est le premier élément par défaut.
$first = current($array);
Si vous voulez vous assurer qu'il pointe vers le premier élément, vous pouvez toujours utiliser reset().
J'aime cette réponse comme la plus complète, mais la note reset()renvoie réellement l'élément, donc suivre cela avec un $first = current($array)est redondant.
Tom Auger
9
Juste pour que nous ayons d'autres options: reset($arr);assez bien si vous n'essayez pas de garder le pointeur de tableau en place, et avec de très grands tableaux, cela entraîne une charge minimale. Cela dit, il y a quelques problèmes avec cela:
reset()est une bien meilleure option car elle renvoie false si le tableau est vide. votre solution ne fonctionnera pas par exemple dans la question
Northys
1
En PHP 7+, quelque chose comme ça fonctionnerait:array_values($array)[0] ?? FALSE
MarthyM
4
Testez si la variable a est un tableau avant d'obtenir le premier élément. Lors de la création dynamique du tableau s'il est défini sur null, vous obtenez une erreur.
Cela ne fonctionne que lorsque le pointeur interne est sur le premier élément. Bien que ce soit bon car cela ne réinitialise pas la position du pointeur, cela ne fonctionne que lorsque le pointeur est déjà au repos.
cjc
1
À partir de PHP 7.3.0, il est possible de se passer de réinitialiser le pointeur interne. Vous utiliseriez array_key_first. Si vous êtes sûr que votre tableau contient des valeurs, vous pouvez simplement faire:
$first = $array[array_key_first($array)];
Plus probablement, vous voudrez gérer le cas où le tableau est vide:
Réponses:
reset()
vous donne la première valeur du tableau si vous avez un élément à l'intérieur du tableau:Il vous donne également
FALSE
si le tableau est vide.la source
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
PHP <7,3
Si vous n'en savez pas assez sur le tableau (vous ne savez pas si la première clé est foo ou bar ), alors le tableau pourrait aussi être, peut-être, vide .
Il serait donc préférable de vérifier, surtout s'il y a une chance que la valeur retournée soit le booléen FALSE:
Le code ci-dessus utilise
reset
et a donc des effets secondaires (il réinitialise le pointeur interne du tableau), vous pouvez donc préférer utiliserarray_slice
pour accéder rapidement à une copie du premier élément du tableau:En supposant que vous souhaitiez obtenir à la fois la clé et la valeur séparément , vous devez ajouter le quatrième paramètre à
array_slice
:Pour obtenir le premier élément par paire (
key => value
):Modification simple pour obtenir le dernier élément, la clé et la valeur séparément:
performance
Si le tableau n'est pas vraiment grand, vous n'avez pas réellement besoin
array_slice
et pouvez plutôt obtenir une copie de l'ensemble du tableau de clés, puis obtenez le premier élément:Si vous avez un très grand tableau, cependant, l'appel à
array_keys
nécessitera beaucoup plus de temps et de mémoirearray_slice
(les deux fonctions parcourent le tableau, mais ce dernier se termine dès qu'il a rassemblé le nombre requis d'éléments - qui est un).Une exception notable est lorsque vous avez la première clé qui pointe vers un objet très volumineux et alambiqué. Dans ce cas
array_slice
, vous dupliquerez ce premier gros objet, tandis que vousarray_keys
ne saisiriez que les clés.PHP 7.3
PHP 7.3 implémente
array_key_first()
ainsi quearray_key_last()
. Celles-ci sont explicitement fournies pour accéder efficacement aux première et dernière clés sans réinitialiser l'état interne du tableau comme effet secondaire.Ainsi, en PHP 7.3, la première valeur de
$array
peut être accédée avecVous feriez quand même mieux de vérifier que le tableau n'est pas vide, sinon vous obtiendrez une erreur:
la source
Fausse boucle qui se brise lors de la première itération:
Ou utilisez
each()
( avertissement: obsolète depuis PHP 7.2.0 ):la source
reset()
fonction ne récupérerait que la première valeur.Il y a quelques options.
array_shift()
renverra le premier élément, mais supprimera également le premier élément du tableau.current()
retournera la valeur du tableau sur lequel pointe son pointeur de mémoire interne, qui est le premier élément par défaut.Si vous voulez vous assurer qu'il pointe vers le premier élément, vous pouvez toujours utiliser
reset()
.la source
reset()
renvoie réellement l'élément, donc suivre cela avec un$first = current($array)
est redondant.Juste pour que nous ayons d'autres options:
reset($arr);
assez bien si vous n'essayez pas de garder le pointeur de tableau en place, et avec de très grands tableaux, cela entraîne une charge minimale. Cela dit, il y a quelques problèmes avec cela:La façon de faire cela sans changer le pointeur:
L'avantage de
$arr[reset(array_keys($arr))];
est qu'il déclenche un avertissement si le tableau est réellement vide.la source
un autre moyen facile et simple de le faire utilise array_values
la source
reset()
est une bien meilleure option car elle renvoie false si le tableau est vide. votre solution ne fonctionnera pas par exemple dans la questionarray_values($array)[0] ?? FALSE
Testez si la variable a est un tableau avant d'obtenir le premier élément. Lors de la création dynamique du tableau s'il est défini sur null, vous obtenez une erreur.
Par exemple:
la source
Nous pouvons faire
$first = reset($array);
Au lieu de
Comme
reset()
renvoie le premier élément du tableau après la réinitialisation;
la source
Tu peux faire:
la source
Utilisez la fonction reset () pour extraire le premier élément de ce tableau sans en connaître la clé comme ceci.
sortie // 400
la source
Vous pouvez essayer ceci.
Pour obtenir la première valeur du tableau: -
Pour obtenir la première clé du tableau
la source
Vous pouvez utiliser array_shift
la source
Je fais cela pour obtenir la première et la dernière valeur. Cela fonctionne également avec plus de valeurs.
la source
À partir de PHP 7.3.0, il est possible de se passer de réinitialiser le pointeur interne. Vous utiliseriez
array_key_first
. Si vous êtes sûr que votre tableau contient des valeurs, vous pouvez simplement faire:Plus probablement, vous voudrez gérer le cas où le tableau est vide:
la source
vous pouvez simplement utiliser
$array[0]
. il vous donnera toujours le premier articlela source