Comment supprimer un élément d'un tableau en PHP : du débutant au pro
\n\nImaginez : vous développez une boutique en ligne en PHP. Une commande arrive, un produit est en rupture de stock — il faut le retirer du panier. Ou vous traitez une liste d'utilisateurs, et quelqu'un décide de supprimer son compte. Dans les deux cas, vous devez supprimer un élément d'un tableau en PHP.
\n\nCela semble simple, non ? Mais ici, un piège attend les débutants. Appeler simplement unset() — et le tableau se casse : les clés ne sont plus séquentielles, et la boucle foreach commence à réserver des surprises. Ne vous inquiétez pas, nous allons analyser tous les pièges et apprendre à supprimer des éléments correctement.
Cet article est une adaptation d'une question populaire sur Stack Overflow, qui a recueilli des milliers de vues. Nous avons traduit les réponses complexes en langage simple et ajouté des exemples issus de la pratique réelle.
\n\nQu'est-ce qu'un tableau en PHP et pourquoi le nettoyer ?
\n\nUn tableau est un conteneur de données. Imaginez une boîte avec des cases, où chaque case a un numéro (indice) ou un nom (clé). Parfois, les données dans ces cases deviennent obsolètes et doivent être jetées.
\n\nEn PHP, les tableaux sont de deux types :
\n\n- \n
- Indexés — clés : 0, 1, 2, 3... (comme une liste de produits). \n
- Associatifs — clés : chaînes (par exemple,
"name" => "Ivan"). \n
Et pour chaque type, il existe une méthode « correcte » de suppression. Si vous les confondez, vous obtiendrez un bug difficile à détecter.
\n\n\n\n
Méthode n°1 : unset() — la force brute (et ses conséquences)
\n\nLa fonction unset($array[$key]) est la manière la plus évidente de supprimer un élément d'un tableau en PHP. Elle détruit simplement la variable ou l'élément du tableau.
<?php\n$fruits = ['apple', 'banana', 'cherry', 'date'];\nunset($fruits[1]); // supprime 'banana'\nprint_r($fruits);\n?>\n\nRésultat :
\n\nArray\n(\n [0] => apple\n [2] => cherry\n [3] => date\n)\n\nRemarquez : l'indice 1 a disparu, mais les autres indices ne se sont pas décalés. Nous avons maintenant un tableau avec un trou : 0, 2, 3. Si vous essayez de le parcourir avec une boucle for avec $i = 0; $i < count($array); $i++ — vous obtiendrez une erreur à l'indice 1, car il n'existe plus.
Quand utiliser unset() :
\n- \n
- Pour les tableaux associatifs (clés sous forme de chaînes) — ici, les trous ne posent pas problème. \n
- Lorsque l'ordre des indices n'a pas d'importance. \n
Quand ne pas l'utiliser :
\n- \n
- Pour les tableaux indexés où la séquence est importante (0,1,2...). \n
- Si vous prévoyez de sérialiser le tableau ou de le transmettre en JSON — les trous peuvent casser la logique côté client. \n
\n\n
Méthode n°2 : array_splice() — supprimer et réindexer
\n\nSi vous voulez supprimer un élément d'un tableau en PHP tout en conservant des indices numériques séquentiels — utilisez array_splice(). Cette fonction non seulement supprime, mais « compresse » automatiquement le tableau.
<?php\n$fruits = ['apple', 'banana', 'cherry', 'date'];\narray_splice($fruits, 1, 1); // à partir de l'indice 1, supprime 1 élément\nprint_r($fruits);\n?>\n\nRésultat :
\n\nArray\n(\n [0] => apple\n [1] => cherry\n [2] => date\n)\n\nLes indices sont redevenus 0, 1, 2. Magnifique ! array_splice() accepte trois paramètres :
- \n
- Le tableau (passé par référence — le tableau d'origine sera modifié). \n
- L'indice de départ. \n
- Le nombre d'éléments à supprimer (si non spécifié, supprime tout jusqu'à la fin). \n
Bonus : cette fonction retourne les éléments supprimés, vous pouvez donc les conserver :
\n\n<?php\n$removed = array_splice($fruits, 1, 1);\necho "Supprimé : " . $removed[0]; // banana\n?>\n\nInconvénient : ne fonctionne qu'avec les indices numériques. Pour les tableaux associatifs, <