reset()
La fonction PHP reset() réinitialise le pointeur interne d'un tableau vers le premier élément et retourne sa valeur. Découvrez son fonctionnement.
Chaque tableau PHP possède un pointeur interne caché qui marque l'élément « courant ». Les fonctions comme current(), key(), next() et prev() lisent et déplacent ce pointeur. Après avoir parcouru un tableau, le pointeur reste à la fin (ou quelque part au milieu) et la prochaine lecture retourne le mauvais élément. La fonction reset() rembobine ce pointeur jusqu'au tout premier élément pour que vous puissiez recommencer depuis le début.
Cet article explique comment fonctionne le pointeur interne, ce que retourne reset(), les pièges courants, et comment elle s'articule avec les autres fonctions de pointeur de tableau.
Qu'est-ce que reset() ?
reset() est une fonction PHP intégrée qui déplace le pointeur interne d'un tableau vers le premier élément et retourne la valeur de cet élément. C'est la contrepartie de end(), qui déplace le pointeur vers le dernier élément.
Point crucial : reset() modifie le pointeur du tableau — c'est pourquoi sa signature prend le tableau par référence (&$array). Vous passez une variable, pas un littéral, et reset() modifie l'état du pointeur de cette variable sur place.
Syntaxe
reset(array &$array): mixedParamètres
| Paramètre | Description |
|---|---|
$array | Le tableau dont vous souhaitez rembobiner le pointeur interne. Il est passé par référence, donc il doit s'agir d'une variable (vous ne pouvez pas passer un littéral de tableau en ligne). |
Valeur de retour
reset() retourne la valeur du premier élément du tableau, ou false si le tableau est vide.
Un piège subtil : comme un tableau vide retourne false, vous ne pouvez pas distinguer de manière fiable « tableau vide » de « le premier élément est littéralement false » en vérifiant uniquement la valeur de retour. Si vous avez besoin de cette distinction, vérifiez le tableau avec empty() ou count() d'abord.
Exemples
Voyons comment reset() se comporte avec différents types de tableaux.
Exemple 1 : Réinitialisation du pointeur d'un tableau numérique
Exemple de réinitialisation du pointeur d'un tableau numérique en PHP
Dans cet exemple, nous avons un tableau de couleurs. Nous appelons la fonction reset() pour réinitialiser le pointeur au début du tableau. Nous appelons ensuite current() pour obtenir le premier élément, qui est 'red'.
Exemple 2 : Réinitialisation du pointeur d'un tableau associatif
Exemple de réinitialisation du pointeur d'un tableau associatif en PHP
Dans cet exemple, nous avons un tableau associatif contenant les détails d'une personne. Nous appelons la fonction reset() pour réinitialiser le pointeur au début du tableau. Nous appelons ensuite key() et current() pour obtenir la paire clé-valeur du premier élément.
Exemple 3 : Pourquoi reset() est important après une itération
C'est la raison la plus courante dans la pratique pour appeler reset(). Les fonctions qui déplacent le pointeur (next(), end(), une boucle while manuelle) le laissent en place. Sans reset(), la prochaine lecture reprend là où vous vous étiez arrêté :
<?php
$colors = ['red', 'green', 'blue'];
// Advance the pointer to the end
end($colors); // pointer now at 'blue'
echo current($colors); // outputs 'blue'
echo "\n";
// Rewind it
reset($colors);
echo current($colors); // outputs 'red'reset() retourne aussi la première valeur, vous pouvez donc la récupérer directement : $first = reset($colors); donne 'red'.
reset() vs. foreach
Un point de confusion fréquent : une boucle foreach n'utilise pas le pointeur interne du tableau. PHP itère sur une copie interne, donc le pointeur n'est pas modifié et vous n'avez pas besoin d'appeler reset() après un foreach :
<?php
$colors = ['red', 'green', 'blue'];
foreach ($colors as $color) {
// ... do something
}
// Pointer was never moved by foreach
echo current($colors); // outputs 'red'Vous n'avez besoin de reset() que lorsque vous (ou une fonction que vous appelez) avancez le pointeur avec les fonctions basées sur le pointeur. Consultez foreach pour comprendre le vrai fonctionnement des boucles.
Pièges courants
- Passez une variable, pas un littéral. Comme l'argument est passé par référence,
reset(['a', 'b'])génère une erreur dans les versions modernes de PHP. Assignez d'abord le tableau à une variable. reset()modifie l'état. Si une autre partie de votre code dépend de la position actuelle du pointeur, appelerreset()la modifiera silencieusement. Passez une copie si vous devez préserver le pointeur d'origine.falseest ambigu. Un retourfalsepeut signifier « tableau vide » ou « la première valeur estfalse». Protégez-vous avecempty($array)lorsque cela compte.
Fonctions associées
| Fonction | Déplace le pointeur vers | Retourne |
|---|---|---|
reset() | Premier élément | Première valeur (ou false) |
end() | Dernier élément | Dernière valeur (ou false) |
next() | Élément suivant | Valeur suivante (ou false) |
prev() | Élément précédent | Valeur précédente (ou false) |
current() | (pas de déplacement) | Valeur courante |
key() | (pas de déplacement) | Clé courante |
Conclusion
reset() rembobine le pointeur interne d'un tableau vers le premier élément et retourne la valeur de cet élément. Utilisez-la chaque fois qu'une opération précédente (next(), end(), ou une boucle de pointeur manuelle) a laissé le pointeur ailleurs qu'au début et que vous devez recommencer la lecture depuis le haut. Rappellez-vous que foreach ne touche pas le pointeur, que l'argument doit être une variable, et qu'un retour false est ambigu pour les tableaux vides.