Не могли бы вы рассказать мне свой способ удалить элемент из массива? Как вы думаете, это хорошо?
Это зависит:
$a1 = array('a' => 1, 'b' => 2, 'c' => 3); unset($a1['b']); // array('a' => 1, 'c' => 3) $a2 = array(1, 2, 3); unset($a2[1]); // array(0 => 1, 2 => 3) // note the missing index 1 // solution 1 for numeric arrays $a3 = array(1, 2, 3); array_splice($a3, 1, 1); // array(0 => 1, 1 => 3) // index is now continous // solution 2 for numeric arrays $a4 = array(1, 2, 3); unset($a4[1]); $a4 = array_values($a4); // array(0 => 1, 1 => 3) // index is now continous
Обычно unset()
безопасен для hashtables (строковые индексированные массивы), но если вам приходится полагаться на непрерывные числовые индексы, вам придется использовать либо array_splice()
либо комбинацию unset()
и array_values()
.
Общий способ:
Согласно руководству
unset($arr[5]); // This removes the element from the array
Отфильтрованный способ:
Существует также функция array_filter (), чтобы заботиться о фильтрах массивов
$numeric_data = array_filter($data, "is_numeric");
Чтобы получить последовательный индекс, вы можете использовать
$numeric_data = array_values($numeric_data);
Рекомендации
PHP – удаление выбранных элементов из массива
Это зависит. Если вы хотите удалить элемент без возникновения пробелов в индексах, вам нужно использовать 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);
с$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 только для массивов (на самом деле словарей) с нечисловыми индексами.