it-swarm.com.ru

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

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

$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(). Это вернет первый элемент массива, удалит его из массива и переиндексирует массив. Все в одном эффективном методе.

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

Result

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