Каков наилучший способ удаления элемента массива в PHP?

Не могли бы вы рассказать мне свой способ удалить элемент из массива? Как вы думаете, это хорошо?

Solutions Collecting From Web of "Каков наилучший способ удаления элемента массива в PHP?"

Это зависит:

$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 только для массивов (на самом деле словарей) с нечисловыми индексами.