web-dev-qa-db-ja.com

配列要素を削除してから配列のインデックスを再作成する方法は?

アレイに問題があります。以下のように変更したい配列が1つあります。インデックスによってその要素(要素)を削除してから、配列のインデックスを再作成します。出来ますか?

$foo = array(

    'whatever', // [0]
    'foo', // [1]
    'bar' // [2]

);

$foo2 = array(

    'foo', // [0], before [1]
    'bar' // [1], before [2]

);
193
daGrevis
unset($foo[0]); // remove item at index 0
$foo2 = array_values($foo); // 'reindex' array
420
xzyfer
39
deceze

array_shift()を使用することをお勧めします。これにより、配列の最初の要素が返され、配列から削除され、配列のインデックスが再作成されます。すべて1つの効率的な方法で。

28
Rene
array_splice($array, array_search(array_value,$array),1);
9
user1092222
Unset($array[0]); 

Sort($array); 

なぜこれがダウン投票されているのかわかりませんが、誰かがそれを試してみようと思ったら、あなたはそれが機能することに気づくでしょう。配列でソートを使用すると、配列のキーが再割り当てされます。唯一の欠点は、値をソートすることです。 array_valuesを使用してもキーは明らかに再割り当てされるため、値がソートされているかどうかは関係ありません。

5
frostymarvelous

で試してください:

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

array_mergeを使用すると、キーのインデックスが再作成されます。マニュアルの状態:

数値キーを持つ入力配列の値は、結果配列のゼロから始まる増分キーで番号が付け直されます。

http://php.net/manual/en/function.array-merge.php

これは私が元の答えを見つけた場所です。

http://board.phpbuilder.com/showthread.php?10299961-Reset-index-on-array-after-unset()

1
Richard Skinner

Xzyferの答えに加えて

関数

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;
}

使用

$my_array=array(
    0=>'test0', 
    1=>'test1', 
    2=>'test2'
);

custom_unset($my_array, 1);

結果

 array(2) {
    [0]=>
    string(5) "test0"
    [1]=>
    string(5) "test2"
  }
0
RafaSashi