Menu

Supprimer un élément d'un tableau PHP : unset, array_splice

unset($array[$key]) supprime un élément par sa clé, array_splice supprime par position et renumérote, et array_diff supprime par valeur. Chaque méthode, comment réindexer ensuite, et le piège d'array_search qui supprime le mauvais élément.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

Pour supprimer un élément d'un tableau PHP par sa clé, utilisez unset($array[$key]). L'élément disparaît, les autres clés restent exactement comme elles étaient, et supprimer une clé qui n'existe pas n'est pas une erreur.

Regardez le second résultat : les clés sont maintenant 0, 2, 3. unset ne renumérote jamais.

Réindexer le tableau après unset

Une liste avec un trou dans ses clés pose problème plus tard : une boucle for ($i = 0; ...) tombe sur l'index manquant, et json_encode écrit un objet JSON au lieu d'un tableau. array_values() vous redonne des clés propres.

Supprimer par position avec array_splice

array_splice($array, $offset, $length) supprime $length éléments à partir de la position $offset, renumérote les clés et renvoie ce qu'elle a supprimé. Une position négative compte depuis la fin. Elle peut aussi insérer des éléments de remplacement dans le même appel.

array_splice travaille sur des positions, pas sur des clés : sur un tableau associatif, elle supprime selon la place dans l'ordre, et garde les clés de type chaîne. La page array_slice la compare à array_slice, qui copie une partie sans modifier l'original.

Supprimer un élément par sa valeur

array_diff($array, [$value]) renvoie le tableau sans aucun élément égal à $value, en gardant les clés des autres. Pour ne supprimer que la première correspondance, trouvez sa clé avec array_search et supprimez-la.

array_diff compare les valeurs comme des chaînes, donc array_diff([1, "1", 2], [1]) supprime à la fois l'entier et la chaîne. Quand la condition va au-delà de « égal à cette valeur », utilisez array_filter avec un callback.

Supprimer le premier ou le dernier élément

array_shift() supprime le premier élément et array_pop() le dernier. Les deux renvoient l'élément supprimé, ce qui les rend pratiques pour des files et des piles.

array_shift renumérote les clés numériques depuis 0. array_pop n'en a pas besoin, puisque le trou est à la fin.

Supprimer plusieurs clés à la fois

unset accepte plusieurs éléments en un appel. Pour supprimer une liste de clés que vous avez dans un tableau, inversez-la avec array_flip() pour que les noms deviennent des clés, puis passez-la à array_diff_key().

Erreur fréquente : unset avec array_search quand la valeur manque

array_search renvoie false quand elle ne trouve rien, et false utilisé comme clé de tableau devient 0. Cette ligne supprime donc le premier élément chaque fois que la valeur n'est pas dans le tableau :

Stockez toujours le résultat d'array_search et comparez-le avec !== false avant de l'utiliser comme clé. Un simple if ($key) ne suffit pas non plus : une correspondance à l'index 0 est aussi évaluée à faux.

Questions fréquentes

Comment supprimer un élément d'un tableau par sa valeur en PHP ?

Pour supprimer toutes les occurrences, utilisez array_diff($arr, ['value']). Pour ne supprimer que la première, trouvez sa clé et supprimez-la, en vérifiant qu'elle a été trouvée : $k = array_search('value', $arr); if ($k !== false) { unset($arr[$k]); }.

Comment réindexer un tableau après unset ?

Entourez-le d'array_values() : $arr = array_values($arr); renumérote les clés depuis 0. Vous pouvez aussi supprimer l'élément avec array_splice($arr, $index, 1), qui renumérote pour vous.

Comment supprimer le premier ou le dernier élément d'un tableau ?

array_shift($arr) supprime et renvoie le premier élément, et renumérote les clés numériques. array_pop($arr) supprime et renvoie le dernier élément.

Peut-on faire un unset dans une boucle foreach ?

Oui. foreach ($arr as $k => $v) { if ($v < 0) { unset($arr[$k]); } } est sûr, car foreach parcourt une copie du tableau pendant que vous modifiez l'original. Les clés gardent leurs trous, appelez donc array_values() ensuite si vous avez besoin d'une liste.

unset sur une clé absente provoque-t-il une erreur ?

Non. unset($arr['missing']) ne fait rien et n'affiche aucun warning, vous n'avez donc pas besoin de vérifier d'abord avec isset.

Illustration des langages de programmation de Coddy

Apprendre à coder avec Coddy

COMMENCER