Есть ли простой способ удалить элемент из массива, используя PHP, так что foreach ($array) больше не включает этот элемент?
Я думал, что установить его на null сделает это, но, видимо, это не работает.
Есть ли простой способ удалить элемент из массива, используя PHP, так что foreach ($array) больше не включает этот элемент?
Я думал, что установить его на null сделает это, но, видимо, это не работает.
Следует отметить, что unset() сохранит индексы нетронутыми, чего и следовало ожидать при использовании строковых индексов (массив в качестве хэш-таблицы), но может быть весьма неожиданным при работе с целочисленными индексированными массивами:
$array = array(0, 1, 2, 3); unset($array[2]); var_dump($array); /* array(3) { [0]=> int(0) [1]=> int(1) [3]=> int(3) } */ $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) } */
So array_splice() можно использовать, если вы хотите нормализовать свои целочисленные ключи. Другой вариант — использовать array_values() после unset():
$array = array(0, 1, 2, 3); unset($array[2]); $array = array_values($array); var_dump($array); /* array(3) { [0]=> int(0) [1]=> int(1) [2]=> int(3) } */
Если у вас есть численно индексированный массив, где все значения уникальны (или они не являются универсальными, но вы хотите удалить все экземпляры определенного значения), вы можете просто использовать array_diff () для удаления соответствующего элемента, например,:
$my_array = array_diff($my_array, array('Value_to_remove'));
Например:
$my_array = array('Andy', 'Bertha', 'Charles', 'Diana'); echo sizeof($my_array) . "\n"; $my_array = array_diff($my_array, array('Charles')); echo sizeof($my_array);
Это отображает следующее:
4 3
В этом примере элемент со значением «charles» удаляется, как это можно проверить с помощью вызовов SizeOf (), которые сообщают об размере 4 для начального массива, и 3 после удаления.