J'ai quelques problèmes avec un tableau. J'ai un tableau que je veux modifier comme ci-dessous. Je veux supprimer des éléments (éléments) par index, puis réindexer tableau. C'est possible?
$foo = array(
'whatever', // [0]
'foo', // [1]
'bar' // [2]
);
$foo2 = array(
'foo', // [0], before [1]
'bar' // [1], before [2]
);
unset($foo[0]); // remove item at index 0
$foo2 = array_values($foo); // 'reindex' array
array_splice($array, 0, 1);
Vous feriez mieux d'utiliser array_shift()
. Cela va retourner le premier élément du tableau, le supprimer du tableau et réindexer le tableau. Tout en un méthode efficace.
array_splice($array, array_search(array_value,$array),1);
Unset($array[0]);
Sort($array);
Je ne sais pas pourquoi cela a été réduit, mais si quelqu'un a pris la peine de l'essayer, vous remarquerez que cela fonctionne. Utiliser trier sur un tableau réaffecte les clés du tableau. Le seul inconvénient est qu'il trie les valeurs. Etant donné que les clés seront bien sûr réaffectées, même avec array_values
, peu importe que les valeurs soient triées ou non.
Essayez avec:
$foo2 = array_slice($foo, 1);
Si vous utilisez array_merge
, cela réindexera les clés. Le manuel dit:
Les valeurs dans le tableau en entrée avec des clés numériques seront renumérotées avec des clés incrémentées à partir de zéro dans le tableau de 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;
}
tiliser
$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"
}