У меня есть массив:
$array = array(1,2,3,4,5);
Если бы я выгрузил содержимое массива, они бы выглядели так:
array(5) {
[0] => int(1)
[1] => int(2)
[2] => int(3)
[3] => int(4)
[4] => int(5)
}
Когда я перебираю и сбрасываю определенные клавиши, все индексы растеряются.
foreach($array as $i => $info)
{
if($info == 1 || $info == 2)
{
unset($array[$i]);
}
}
Впоследствии, если бы я сделал еще один дамп сейчас, он бы выглядел так:
array(3) {
[2] => int(3)
[3] => int(4)
[4] => int(5)
}
Есть ли правильный способ сброса массива, чтобы его элементы снова основывались на нуле ??
array(3) {
[0] => int(3)
[1] => int(4)
[2] => int(5)
}
Есть еще один интересный метод:
Теперь ключи $ array сброшены.
источник
Используйте,
array_splice
а неunset
:Рабочий образец здесь .
источник
foreach
цикл. Используйте стандартi Loop
и просто сбросьте I после соединения. ТакжеWorking sample here.
не работает.Просто добавка.
Я знаю, что это старо , но я хотел добавить решение, я не вижу, что я придумал сам. Нашел этот вопрос, когда искал другое решение, и просто подумал: «Ну, пока я здесь».
Прежде всего, ответ Нила хорош и хорош для использования после запуска цикла, однако я бы предпочел выполнить всю работу сразу. Конечно, в моем конкретном случае мне пришлось проделать больше работы, чем этот простой пример, но метод все еще применяется. Я видел, где пара других предложили
foreach
петли, однако, это все еще оставляет вас после работы из-за природы зверя. Обычно я предлагаю более простые вещи, какforeach
, однако, в этом случае лучше всего помнить старую добруюfor loop
логику. Просто используйтеi
! Чтобы поддерживать соответствующий индекс, просто вычитайтеi
после каждого удаления элемента массива.Вот мой простой, рабочий пример:
Будет выводить:
Это может иметь много простых реализаций. Например, мой точный случай требовал хранения последнего элемента в массиве на основе многомерных значений. Я покажу вам, что я имею в виду:
Будет выводить:
Как вы видите, я манипулирую $ i перед соединением, поскольку я пытаюсь удалить предыдущий, а не текущий элемент.
источник
Поздний ответ, но после PHP 5.3 может быть так;
источник
Или вы можете сделать свою собственную функцию, которая передает массив по ссылке.
Итак, все, что вам нужно сделать, это ...
... и теперь у вас
$array
нет значений, которые вы поместили,$unsets
и ключи сброшеныисточник
100% работает на меня! После сброса элементов в массиве вы можете использовать это для переиндексации массива
источник
Я использую,
$arr = array_merge($arr);
чтобы перебазировать массив. Просто и понятно.источник
В моей ситуации мне нужно было сохранить уникальные ключи со значениями массива, поэтому я просто использовал второй массив:
источник
unset($arr1)
который сделает это НЕ доступным для повторения в вашем цикле. 2) Вы пропускаете точку с запятой на второй и последней строке. Этот фрагмент кода не будет работать.