Как удалить элемент массива, а затем повторно индексировать массив? - PullRequest
194 голосов
/ 07 марта 2011

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

$foo = array(

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

);

$foo2 = array(

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

);

Ответы [ 8 ]

424 голосов
/ 07 марта 2011
unset($foo[0]); // remove item at index 0
$foo2 = array_values($foo); // 'reindex' array
39 голосов
/ 07 марта 2011
28 голосов
/ 11 сентября 2012

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

9 голосов
/ 20 февраля 2013
array_splice($array, array_search(array_value,$array),1);
5 голосов
/ 07 марта 2011
Unset($array[0]); 

Sort($array); 

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

4 голосов
/ 07 марта 2011

Попробуйте с:

$foo2 = array_slice($foo, 1);
1 голос
/ 08 февраля 2016

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

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

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

Здесь я нашел оригинальный ответ.

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

0 голосов
/ 31 октября 2014

В дополнение к ответу 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"
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...