Comprendre la fonction array_shift de PHP
La fonction array_shift en PHP supprime le premier élément d'un array et retourne sa valeur. Découvrez la syntaxe et les exemples.
La fonction array_shift en PHP supprime le premier élément d'un array et retourne sa valeur. Comme elle opère toujours sur le début de l'array, c'est l'outil naturel pour consommer une liste depuis le départ — traiter une file d'attente, retirer une ligne d'en-tête ou supprimer un élément indésirable en tête de liste.
Deux caractéristiques distinguent array_shift d'un simple unset($array[0]) :
- Elle modifie l'array original en place (passé par référence) — vous ne créez pas de nouvel array.
- Elle réindexe les clés numériques, de sorte que les éléments restants recommencent toujours à
0. Les clés string restent inchangées.
Cette page couvre la syntaxe, la valeur de retour, le comportement de réindexation important, un piège courant avec les boucles, et plusieurs exemples exécutables.
Syntaxe
array_shift(array &$array): mixed| Élément | Signification |
|---|---|
&$array | L'array depuis lequel effectuer le décalage. Passé par référence, il est donc modifié directement. |
| valeur de retour | La valeur du premier élément supprimé, ou null si l'array est vide. |
Comme l'array est passé par référence, vous appelez array_shift($colors) sur une variable — pas sur un littéral ou le résultat d'une fonction.
Supprimer le premier élément
L'utilisation la plus courante est de retirer le premier élément. La fonction modifie l'array directement :
Le résultat sera :
Array
(
[0] => green
[1] => blue
)Récupérer la valeur supprimée
array_shift retourne l'élément qu'elle a supprimé, vous pouvez donc le conserver tout en réduisant l'array en une seule instruction :
Le résultat sera :
red
Array
(
[0] => green
[1] => blue
)Les clés sont réindexées
C'est le comportement qui surprend le plus les gens. array_shift ne se contente pas de supprimer $array[0] — elle renuméroté chaque clé entière restante à partir de 0. Les clés string conservent leurs noms.
<?php
$data = [5 => "a", 10 => "b", "x" => "c"];
array_shift($data); // removes "a"
print_r($data);
?>Le résultat sera :
Array
(
[0] => b
[x] => c
)Notez que 10 => "b" est devenu 0 => "b", tandis que "x" => "c" est resté intact. Si vous devez conserver les clés numériques d'origine, utilisez plutôt array_slice.
Traiter un array comme une file d'attente
Un schéma courant consiste à vider un array par le début, en traitant un élément à la fois. L'idiome standard utilise array_shift dans une boucle while :
Le résultat sera :
Running: build
Running: test
Running: deployLa boucle s'arrête car array_shift retourne null une fois l'array vide.
Piège : ne pas boucler sur un test de véracité
On voit souvent cette forme plus courte :
while ($value = array_shift($queue)) { ... }Elle fonctionne pour des string comme "build", mais c'est un piège. La condition n'est vraie que si la valeur est vraie, donc la boucle s'arrête prématurément au premier 0, "", "0", false ou null :
<?php
$numbers = array(3, 0, 1);
while ($n = array_shift($numbers)) {
echo "$n\n";
}
print_r($numbers); // 1 was never processed
?>Le résultat sera :
3
Array
(
[0] => 1
)La boucle s'est arrêtée à 0, laissant 1 derrière. Comparez toujours explicitement avec null (!== null) lorsque les valeurs peuvent être fausses.
Supprimer plusieurs éléments de tête
Appeler array_shift de manière répétée retire des éléments depuis le début. Ici nous supprimons les trois premiers :
Le résultat sera :
Array
(
[0] => yellow
[1] => orange
)Pour supprimer un bloc d'éléments de tête en un seul appel plutôt qu'en boucle, utilisez array_splice($colors, 0, 3).
Fonctions associées
array_shift est l'une des quatre fonctions permettant d'ajouter et de supprimer des éléments aux extrémités d'un array :
| Fonction | Agit sur | Ce qu'elle fait |
|---|---|---|
| array_shift | Début | Supprime et retourne le premier élément |
| array_unshift | Début | Ajoute un ou plusieurs éléments au début |
| array_pop | Fin | Supprime et retourne le dernier élément |
| array_push | Fin | Ajoute un ou plusieurs éléments à la fin |
Pour découper sans muter l'array d'origine, voir array_slice ; pour supprimer ou remplacer une plage, voir array_splice.
Conclusion
array_shift supprime le premier élément d'un array, retourne sa valeur, modifie l'array en place et réindexe les clés entières restantes à partir de 0. Elle est idéale pour consommer un array comme une file d'attente et pour retirer des éléments indésirables en tête de liste — souvenez-vous simplement du comportement de réindexation et du piège de boucle avec les valeurs fausses abordés ci-dessus.