Как удалить элемент из массива, когда я знаю имя элемента? например:
У меня есть массив:
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
пользователь вводит strawberry
strawberry
устранен.
Чтобы полностью объяснить:
У меня есть база данных, в которой хранится список элементов, разделенных запятой. Код загружается в список на основе выбора пользователя, где этот выбор находится. Таким образом, если они выбирают «клубнику», они извлекают код в каждой записи, где находится «клубника», а затем преобразуют ее в массив с помощью split (). Я хочу, чтобы они удалили выбранные пользователем элементы, например, для клубники, из массива.
Ответы:
Используйте,
array_search
чтобы получить ключ и удалить его,unset
если он найден:array_search
возвращает false ( ноль до PHP 4.2.0), если элемент не был найден.И если может быть несколько элементов с одинаковым значением, вы можете использовать,
array_keys
чтобы получить ключи ко всем элементам:источник
$submenuArray
? (Обратите внимание, что с каждым циклом$submenuArray
будут перезаписаны.)Используйте
array_diff()
для решения 1 линии:... Нет необходимости в дополнительных функциях или цикле foreach.
источник
strawberry
его нет в исходном массиве, он станет доступным в$array_without_strawberries
массиве - опасный код, если вы хотите убедиться, что данный элемент не находится в массиве.$a = array_diff(array(), array('strawberry'));
- $ a это пустой массив.источник
$my_array = array_values($my_array);
.in_array
иarray_search
). Использование возвратаarray_search
as в ответе Гамбо более эффективноЕсли вы используете простой массив здесь (что выглядит так), вы должны использовать этот код:
unset($array[$key])
только удаляет элемент, но не переупорядочивает обычный массив.Предположим, у нас есть массив и мы используем array_splice:
По сравнению с unset:
Обратите внимание, как
unset($array[$key])
не переупорядочивать массив.источник
unset
ничего не возвращает. Такjson_encode(unset($array[2]))
что не подходит для сравнения.Вы можете использовать фильтр массива для удаления элементов по определенному условию
$v
:источник
array_filter()
. Хотя я лично буду использовать анонимную функцию в своей реализации, я считаю, что правильным действием для SO было бы прокомментировать или отредактировать ответ D.Martin, если вы хотите сделать микро-улучшение, чтобы эта страница не стала раздутой. Пожалуйста, удалите этот дубликат ответа.Будет так:
источник
Это простое повторение, которое может удалить несколько значений в массиве.
источник
array_diff()
. Как это получило три голоса. Никто не должен находить этот ответ полезным или использовать его в своих собственных проектах. Я рекомендую удалить этот ответ - это поможет освободить вашу учетную запись от некачественного ответа, уменьшит количество сообщений на этой странице и даст вам значок Disciplined. Я отложу мое понижение, чтобы у вас было время удалить за вознаграждение.Просто вы можете сделать одну строку. Это будет удалить элемент из массива
источник
В настоящее время я использую эту функцию:
Вы можете ввести массив или только строку с элементами, которые должны быть удалены. Напишите это так:
ИЛИ
$detils = array_delete('orange', $detils);
Это также переиндексирует это.
источник
На этот вопрос есть несколько ответов, но я хочу добавить что-то еще, потому что когда я использовал
unset
илиarray_diff
меня было несколько проблем, чтобы поиграть с индексами нового массива, когда конкретный элемент был удален (потому что первоначальный индекс сохранен)Вернусь к примеру:
или
Если вы напечатаете результат, вы получите:
Результат:
Но индексы будут сохранены, и вы получите доступ к вашему элементу, например:
И поэтому окончательный массив не переиндексируется. Так что вам нужно добавить после
unset
илиarray_diff
:После этого ваш массив будет иметь нормальный индекс:
Связанные с этим постом: Re-Index Array
Надеюсь, это поможет
источник
Возможно, лучшим подходом было бы сохранить ваши значения в качестве ключей в ассоциативном массиве, а затем вызывать
array_keys()
его, когда вы хотите получить реальный массив. Таким образом, вам не нужно использовать,array_search
чтобы найти свой элемент.источник
Ответ на PHP массив удалить по значению (не ключу) Предоставлено https://stackoverflow.com/users/924109/rok-kralj
ИМО - лучший ответ, поскольку он удаляет и не мутирует
Это хорошо обобщает, вы можете удалить столько элементов, сколько хотите одновременно, если хотите.
Отказ от ответственности: обратите внимание, что мое решение создает новую копию массива, сохраняя при этом старый нетронутым в отличие от принятого ответа, который изменяется. Это может быть немного медленнее из-за этого.
источник
Я искал ответ на тот же вопрос и наткнулся на эту тему. Я вижу два основных способа: сочетание
array_search
&unset
и использованиеarray_diff
. На первый взгляд мне показалось, что первый метод будет быстрее, так как не требует создания дополнительного массива (как при использованииarray_diff
). Но я написал небольшой тест и убедился, что второй метод не только более лаконичен, но и быстрее! Рад поделиться с вами этим. :)https://glot.io/snippets/f6ow6biaol
источник
Я бы предпочел использовать array_key_exists для поиска ключей в массивах, таких как:
Array([0]=>'A',[1]=>'B',['key'=>'value'])
эффективно найти указанное, так как array_search и in_array () здесь не работают. И сделать удаление вещи с помощью unset () .
Я думаю, что это поможет кому-то.
источник
Создать числовой массив с удалением определенного значения массива
Вы можете обратиться по этой ссылке ..
источник
источник
Используя
array_seach()
, попробуйте следующее:array_search()
возвращает ключ найденного элемента, который можно использовать для удаления этого элемента из исходного массива с помощьюunset()
. Он вернетсяFALSE
при неудаче, однако может вернуть значение «фальси» в случае успеха (ваш ключ может быть,0
например), именно поэтому используется!==
оператор строгого сравнения .Оператор
if()
проверит,array_search()
вернулось ли значение, и выполнит действие, только если он это сделал.источник
источник
array_search()
-unset()
метод уже отвечал Джон Conde лет до твоего. Повторяющиеся ответы не имеют значения для читателей и на самом деле доставляют неудобства из-за потери времени при прокрутке и чтении избыточной информации. Пожалуйста, удалите этот ответ.источник
источник
источник