Удаление элемента массива по значению
Мне нужно удалить элемент массива с заданным значением:
if (in_array($id, $items)) { $items = array_flip($items); unset($items[ $id ]); $items = array_flip($items); }
Может ли это быть более коротким (более эффективным) способом?
Это можно сделать с помощью простого однострочного вкладыша.
Имея этот массив:
Ты можешь сделать:
И значение
$arr
будет:Надеюсь, что это поможет написать красивый код.
Я добавляю второй ответ. Я написал сценарий быстрого тестирования, чтобы попробовать различные методы здесь.
Третий метод,
array_keys()
с указанным необязательным параметром поиска, по-видимому, является лучшим методом. Пример вывода:Судя по этому, решение, которое я бы использовал, было бы следующим:
Как насчет:
или для нескольких значений:
Это также предотвратило бы потерю ключа, что является побочным эффектом
array_flip()
.удалить
$rm_val
из$arr
Наиболее мощным решением будет использование
array_filter
, который позволит вам определить вашу собственную функцию фильтрации.Но некоторые могут сказать, что это немного перебор, в вашей ситуации …
Простой цикл
foreach
проходящий через массив и удаляющий элемент, который вам не нужен, должен быть достаточным.Что-то вроде этого, в вашем случае, должно, вероятно, сделать трюк:
без флип:
Ваши решения работают только в том случае, если у вас есть уникальные значения в вашем массиве
Видеть:
Лучший способ был бы не задан с помощью array_search в цикле, если это необходимо.
Попробуйте array_search ()
Вы можете использовать функцию array_splice для этой операции Ref: array_splice