Использование unset() функции для числовых массивов является немного проблематичным. Я объясню всю
суть проблемы ниже в примере:
Пример:
<?php $x = array(5, 6); unset($x[0]); var_dump($x); ?>
Результат:
array(1) { [1]=> int(6) }
Собственно проблема в том, что мы делаем unset() для $x[0] — это цифра 5, у которой индекс стоит 0, тем самым по логике, когда «5» убирается из массива, 6 должна стать на место 5, но это не так, она так, потому что 6 так и остается с индексом 1 ($x[1]).
Решение
Чтобы решить данную проблему, можно использовать функцию array_splice() , которая выполняет свою работу на ура.
Пример:
<?php $array = array(0, 1, 2, 3); array_splice($array, 2, 1); var_dump($array);
Результат:
array(3) { [0]=> int(0) [1]=> int(1) [2]=> int(3) }
В данном случае индексация обновляется как это нужно и $array имеет все индексы в порядке возрастания, как нам и нужно. Если ключи (индексация) не имеют значения, то проще использовать unset(), но опять же — на вкус и цвет любителя нет. Все используют функции по разному — кому что нравится.
Приятного пользования!