Supprimer un élément d’un tableau php en gardant les index à jour
Classé dans : Astuces, ProgrammationVoici 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.
- Permalien
- maniT4c
- 16 nov 2011 1:23
- Commentaires (2)
le 7 décembre 2011 à 19:45
On aurait pu également utiliser la fonction array_values qui fonctionne sur tout type de tableau (index numerique ou pas).
http://fr.php.net/manual/fr/function.array-values.php
$array[0]="a";
$array[1]="b";
$array[2]="b";
$array[3]="d";
$array[4]="e";
unset($array[3]);
$array = array_values($array);
print_r($array);
//vous allez obtenir
Array ( [0] => a [1] => b [2] => b [3] => e )
le 8 décembre 2011 à 8:33
@Rhumsteq en effet c’est judicieux et plus efficace comme code merci !