Comment supprimer un élément de tableau et ensuite re-indexer un tableau?
j'ai quelques problèmes avec un tableau. J'ai un tableau que je veux modifier comme ci-dessous. Je veux supprimer l'élément (les éléments) de celui-ci par index et puis re-index tableau. Est-il possible?
$foo = array(
'whatever', // [0]
'foo', // [1]
'bar' // [2]
);
$foo2 = array(
'foo', // [0], before [1]
'bar' // [1], before [2]
);
8 réponses
unset($foo[0]); // remove item at index 0
$foo2 = array_values($foo); // 'reindex' array
Vous feriez mieux d'utiliser array_shift()
. Qui retourne le premier élément du tableau, le retirer de la pile et ré-indexer le tableau. Tous en une seule méthode efficace.
Unset($array[0]);
Sort($array);
je ne sais pas pourquoi c'est downvoted, mais si quelqu'un a pris la peine de l'essayer, vous verrez que cela fonctionne.
L'utilisation de sort sur un tableau permet de réassigner les clés du tableau. Le seul inconvénient est qu'il trie les valeurs.
Puisque les clés seront évidemment réassignées, même avec array_values
, peu importe si les valeurs sont triées ou non.
si vous utilisez array_merge
, cela réindexera les clés. Le manuel dit:
les Valeurs dans le tableau d'entrée avec les touches numériques seront renumérotés avec incrémentation des touches à partir de zéro dans le tableau des résultats.
http://php.net/manual/en/function.array-merge.php
c'est là que j'ai trouvé la réponse originale.
http://board.phpbuilder.com/showthread.php?10299961-Reset-index-on-array-after-unset ()
en plus de la réponse de xzyfer
la fonction
function custom_unset(&$array=array(), $key=0) {
if(isset($array[$key])){
// remove item at index
unset($array[$key]);
// 'reindex' array
$array = array_values($array);
//alternatively
//$array = array_merge($array);
}
return $array;
}
Utiliser
$my_array=array(
0=>'test0',
1=>'test1',
2=>'test2'
);
custom_unset($my_array, 1);
résultat
array(2) {
[0]=>
string(5) "test0"
[1]=>
string(5) "test2"
}