web-dev-qa-db-fra.com

Comment supprimer un élément de tableau, puis ré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 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]

);
196
daGrevis
unset($foo[0]); // remove item at index 0
$foo2 = array_values($foo); // 'reindex' array
431
xzyfer
40
deceze

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.

28
Rene
array_splice($array, array_search(array_value,$array),1);
9
user1092222
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.

7
frostymarvelous

Essayez avec:

$foo2 = array_slice($foo, 1);
4
hsz

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

1
Richard Skinner

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"
  }
0
RafaSashi