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]

);
177
demandé sur daGrevis 2011-03-07 12:04:20

8 réponses

unset($foo[0]); // remove item at index 0
$foo2 = array_values($foo); // 'reindex' array
392
répondu xzyfer 2011-03-07 09:06:19
39
répondu deceze 2011-03-07 09:08:03

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.

24
répondu Rene 2014-11-28 00:32:32
array_splice($array, array_search(array_value,$array),1);
8
répondu user1092222 2013-02-20 09:59:27

Essayez avec:

$foo2 = array_slice($foo, 1);
3
répondu hsz 2011-03-07 09:08:03
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.

2
répondu frostymarvelous 2012-09-11 20:51:53

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 ()

1
répondu Richard Skinner 2016-02-08 11:04:55

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"
  }
-1
répondu RafaSashi 2014-10-31 13:19:27