2012-06-08 3 views
6

По какой-то причине при удалении элементов из массива я оставляю ключи, такие как 0, 2, 3, 4, 6, 9 вместо 0, 1, 2, 3, 4, 5. Итак Я пытаюсь понять, почему, и что я могу сделать, чтобы исправить это, не сортируя все через sort(), поскольку это приведет к упорядочению вещей. Я просто хочу заново заговорить.PHP фиксирует числовые ключи в массиве

ответ

26

Используйте array_values(), чтобы получить значения исходного массива и вернуть их в новый массив. Этот новый массив содержит новые числовые ключи.

$new_array = array_values($old_array); 
+0

Я должен предположить, что это не сработает, если ключ массива потенциально может быть ассоциативным, и вы хотите знать о нем. – ThorSummoner

3

Поскольку ключи не обязательно имеет значения, вы можете просто запустить свой окончательный массив результатов через array_values(). Он оставляет все значения в том порядке, в котором они уже были, сбросив все ключи до последовательных числовых значений.

+0

Это на самом деле ложно, кто-то узнал, что порядок не является порядком внешнего вида, а запросом foreach, который хранится: http://php.net/manual/fr/function.array-values.php#114941 – Sebas

5

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

Вы должны быть осторожны с array_values(), так как он не будет (или, по крайней мере, не работает), потому что он может re-order your numeric indexes. Если вы добавили значение в индекс 0 после значения в индексе 3, значение в индексе 0 будет помещено в конец массива, возвращенное array_values(), тогда как оно появится первым в вашей.

Смежные вопросы