Это зависит. Если вы хотите удалить элемент, не вызывая пробелов в индексах, вам нужно использовать array_splice:
$a = array('a','b','c', 'd');
array_splice($a, 2, 1);
var_dump($a);
Выход:
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "d"
}
Использование unset может работать, но это приводит к непостоянному индексу. Иногда это может быть проблемой, когда вы выполняете итерацию по массиву, используя count ($ a) - 1 в качестве меры верхней границы:
$a = array('a','b','c', 'd');
unset($a[2]);
var_dump($a);
Выход:
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[3]=>
string(1) "d"
}
Как видите, счетчик теперь равен 3, но индекс последнего элемента также равен 3.
Поэтому я рекомендую использовать array_splice для массивов с числовыми индексами и использовать unset только для массивов (действительно словарей) с нечисловыми индексами.