Как удалить элемент массива, а затем повторно индексировать массив?

У меня есть проблемы с массивом. У меня есть один массив, который я хочу изменить, как показано ниже. Я хочу удалить элемент (элементы) из него по индексу, а затем повторно проиндексировать массив. Возможно ли это?

$foo = array(

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

);

$foo2 = array(

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

);

Ответ 1

unset($foo[0]); // remove item at index 0
$foo2 = array_values($foo); // 'reindex' array

Ответ 3

Лучше использовать array_shift(). Это вернет первый элемент массива, удалит его из массива и переиндексирует массив. Все в одном эффективном методе.

Ответ 4

array_splice($array, array_search(array_value,$array),1);

Ответ 5

Попробуйте:

$foo2 = array_slice($foo, 1);

Ответ 6

Unset($array[0]); 

Sort($array); 

Я не знаю, почему это задерживается, но если кто-то потрудился попробовать его, вы заметите, что он работает. Использование сортировки по массиву переназначает ключи массива. Единственный недостаток - это сортировка значений. Поскольку ключи, очевидно, будут переназначены, даже при array_values, не имеет значения, сортируются значения или нет.

Ответ 7

Если вы используете array_merge, это приведет к повторному индексу ключей. В руководстве указано:

Значения во входном массиве с числовыми ключами будут перенумерованы на приращение клавиш, начинающихся с нуля в массиве результатов.

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

Вот где я нашел исходный ответ.

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

Ответ 8

В дополнение к 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"
  }