Что лучший способ состоит в том, чтобы удалить объект массива в PHP?

Каждый разработчик программного обеспечения хочет создать их собственную систему отслеживания ошибок. Это - потому что мы можем , очевидно , изменяют к лучшему то, что уже там, так как мы - специалисты по проблемной области.

Это почти наверняка не стоит стоимости (с точки зрения часов разработчика). Просто купите JIRA.

при необходимости в дополнительных отчетах для системы отслеживания ошибок можно добавить их, даже если необходимо сделать это путем доступа к базовой базе данных непосредственно.

12
задан meagar 13 September 2012 в 17:52
поделиться

3 ответа

Это зависит от:

$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 () безопасен для хэш-таблиц (массивов с индексированными строками), но если вам нужно полагаться на непрерывные числовые индексы, вы необходимо использовать либо array_splice () , либо комбинацию unset () и array_values ​​() .

14
ответ дан 2 December 2019 в 05:04
поделиться

Обычный способ:

Согласно руководству

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 - Удалить выбранные элементы из массива

10
ответ дан 2 December 2019 в 05:04
поделиться

Это зависит от обстоятельств. Если вы хотите удалить элемент, не вызывая пробелов в индексах, вам нужно использовать 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"
}

Как видите, count теперь 3, но индекс последнего element также 3.

Поэтому я рекомендую использовать array_splice для массивов с числовыми индексами и использовать unset только для массивов (на самом деле словарей) с нечисловыми индексами.

6
ответ дан 2 December 2019 в 05:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: