Si j'avais un tableau comme:
$array['foo'] = 400;
$array['bar'] = 'xyz';
Et je voulais sortir le premier élément de ce tableau sans en connaître la clé, comment ferais-je cela? Y a-t-il une fonction pour cela?
Si j'avais un tableau comme:
$array['foo'] = 400;
$array['bar'] = 'xyz';
Et je voulais sortir le premier élément de ce tableau sans en connaître la clé, comment ferais-je cela? Y a-t-il une fonction pour cela?
Réponses:
reset() vous donne la première valeur du tableau si vous avez un élément à l'intérieur du tableau:
$value = reset($array);
Il vous donne également FALSEsi le tableau est vide.
$arr = array(/* stuff */); $val = $arr? reset($arr): /* value to indicate array is empty */;
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:
$value = $default;
foreach(array_slice($arr, 0, 1) as $value);
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:
foreach(array_slice($arr, 0, 1, true) as $key => $value);
Pour obtenir le premier élément par paire ( key => value):
$item = array_slice($arr, 0, 1, true);
Modification simple pour obtenir le dernier élément, la clé et la valeur séparément:
foreach(array_slice($arr, -1, 1, true) as $key => $value);
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 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];
}
Fausse boucle qui se brise lors de la première itération:
$key = $value = NULL;
foreach ($array as $key => $value) {
break;
}
echo "$key = $value\n";
Ou utilisez each()( avertissement: obsolète depuis PHP 7.2.0 ):
reset($array);
list($key, $value) = each($array);
echo "$key = $value\n";
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.
$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().
reset($array);
$first = current($array);
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:
$arr = array(1,2);
current($arr); // 1
next($arr); // 2
current($arr); // 2
reset($arr); // 1
current($arr); // 1 !This was 2 before! We've changed the array's pointer.
La façon de faire cela sans changer le pointeur:
$arr[reset(array_keys($arr))]; // OR
reset(array_values($arr));
L'avantage de $arr[reset(array_keys($arr))];est qu'il déclenche un avertissement si le tableau est réellement vide.
un autre moyen facile et simple de le faire utilise array_values
array_values($array)[0]
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
array_values($array)[0] ?? FALSE
Nous pouvons faire
$first = reset($array);
Au lieu de
reset($array);
$first = current($array);
Comme reset()
renvoie le premier élément du tableau après la réinitialisation;
Utilisez la fonction reset () pour extraire le premier élément de ce tableau sans en connaître la clé comme ceci.
$value = array('foo' => 400, 'bar' => 'xyz');
echo reset($value);
sortie // 400
Vous pouvez essayer ceci.
Pour obtenir la première valeur du tableau: -
<?php
$large_array = array('foo' => 'bar', 'hello' => 'world');
var_dump(current($large_array));
?>
Pour obtenir la première clé du tableau
<?php
$large_array = array('foo' => 'bar', 'hello' => 'world');
$large_array_keys = array_keys($large_array);
var_dump(array_shift($large_array_keys));
?>
Je fais cela pour obtenir la première et la dernière valeur. Cela fonctionne également avec plus de valeurs.
$a = array(
'foo' => 400,
'bar' => 'xyz',
);
$first = current($a); //400
$last = end($a); //xyz
À 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:
$first = (empty($array)) ? $default : $array[array_key_first($array)];
vous pouvez simplement utiliser $array[0]. il vous donnera toujours le premier article