У меня проблемы с массивом. У меня есть один массив, который я хочу изменить, как показано ниже. Я хочу удалить элемент (элементы) из него по индексу, а затем повторно проиндексировать массив. Является ли это возможным?
$foo = array( 'whatever', // [0] 'foo', // [1] 'bar' // [2] ); $foo2 = array( 'foo', // [0], before [1] 'bar' // [1], before [2] );
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_splice($array, 0, 1);
Вам лучше использовать 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" }