Voici une fonction PHP qui vous permettra de supprimer une valeur d’un tableau tout en mettant à jour les index afin de ne pas avoir de « trou ».
Lorsque vous désirez supprimer un élément d’un tableau vous utilisez sans doute la fonction suivante:
unset($array[$key])
Si cela ne pose aucun problème avec des tableaux associatifs, c’est plus ennuyeux sur des tableaux avec des clefs numériques car cela génère des « trous » dans les index.
Voici un exemple pour illustrer ce que j’avance:
$array[0]='a'; $array[1]='b'; $array[2]='b'; $array[3]='d'; $array[4]='e'; unset($array[3]); print_r($array); //vous allez obtenir Array ( [0] =>a [1] =>b [2] =>b [4] =>e )
Avec la fonction suivante plus de problème:
/* * Supprime la clef $key et sa valeur associée du tableau $array * modifie les index pour qu'il n'y ai pas de 'trou' dans les clefs * Les clefs de $array doivent être numériques * la fonction retourne un tableau comprenant la valeur supprimée */ function array_middle_shift(&$array,$key) { $length=(($key+1)-count($array)==0)?1:($key+1)-count($array); return array_splice($array,$key,$length); }
Voici le même exemple que précédemment mais en utilisant cette nouvelle fonction:
$array[0]='a'; $array[1]='b'; $array[2]='b'; $array[3]='d'; $array[4]='e'; array_middle_shift($array,3); print_r($array); //vous allez obtenir Array ( [0] => a [1] => b [2] => b [3] => e )
Et voila plus de trou dans vos index.
Quelques précisions à noter:
– Elle ne fonctionne que sur des tableaux ayant des index « numérique ».
– Le premier index de votre tableau doit être 0.
– Votre tableau ne doit pas contenir de trou au départ.
– Si vous en avez besoin, la fonction retourne également la valeur supprimée et sa clef dans un tableau.