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

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

$foo = array( 'whatever', // [0] 'foo', // [1] 'bar' // [2] ); $foo2 = array( 'foo', // [0], before [1] 'bar' // [1], before [2] ); 

Solutions Collecting From Web of "Как удалить элемент массива, а затем повторно индексировать массив?"

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

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

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

Попробуйте:

 $foo2 = array_slice($foo, 1); 
 Unset($array[0]); Sort($array); 

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

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

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

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

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

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

В дополнение к ответу 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; } с 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" }