PHP: как удалить конкретный элемент из массива?
Как удалить элемент из массива, когда я знаю имя элемента? например:
у меня есть массив:
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
пользователь вводит strawberry
strawberry
удалены.
полностью объяснить:
у меня есть база данных, в которой хранится список элементов, разделенных запятой. Код извлекает список на основе выбора пользователя, где этот выбор находится. Так что, если они выберут клубнику они код тянет в каждой записи были клубника находится затем преобразует это в массив с помощью split(). Я хочу, чтобы они удалили выбранные пользователем элементы, например клубнику, из массива.
19 ответов:
использовать
array_search
чтобы получить ключ и удалить его сunset
если нашел:if (($key = array_search('strawberry', $array)) !== false) { unset($array[$key]); }
array_search
возвращает ложные ( null до PHP 4.2.0) если элемент не найден.и если там может быть несколько элементов с одинаковым значением, вы можете использовать
array_keys
чтобы получить ключи от всех предметов:foreach (array_keys($array, 'strawberry') as $key) { unset($array[$key]); }
использовать
array_diff()
для 1 решения строку:$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi', 'strawberry'); //throw in another 'strawberry' to demonstrate that it removes multiple instances of the string $array_without_strawberries = array_diff($array, array('strawberry')); print_r($array_without_strawberries);
...нет необходимости в дополнительных функциях или цикле foreach.
если вы используете простой массив здесь (что похоже на случай), вы должны использовать этот код вместо:
if (($key = array_search('strawberry', $array)) !== false) { array_splice($array, $key, 1); }
unset($array[$key])
только удаляет элемент, но не переупорядочивает простой массив.предположительно мы имеем массив и используем array_splice:
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi'); array_splice($array, 2, 1); json_encode($array); // yields the array ['apple', 'orange', 'blueberry', 'kiwi']
по сравнению с unset:
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi'); unset($array[2]); json_encode($array); // yields an object {"0": "apple", "1": "orange", "3": "blueberry", "4": "kiwi"}
обратите внимание, как
unset($array[$key])
не переупорядочивает массив.
Это простое повторение, которое может удалить несколько значений в массиве.
// Your array $list = array("apple", "orange", "strawberry", "lemon", "banana"); // Initilize what to delete $delete_val = array("orange", "lemon", "banana"); // Search for the array key and unset foreach($delete_val as $key){ $keyToDelete = array_search($key, $list); unset($list[$keyToDelete]); }
В настоящее время я использую эту функцию:
function array_delete($del_val, $array) { if(is_array($del_val)) { foreach ($del_val as $del_key => $del_value) { foreach ($array as $key => $value){ if ($value == $del_value) { unset($array[$key]); } } } } else { foreach ($array as $key => $value){ if ($value == $del_val) { unset($array[$key]); } } } return array_values($array); }
вы можете ввести массив или только строку с элементами, которые должны быть удалены. Напишите это так:
$detils = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi'); $detils = array_delete(array('orange', 'apple'), $detils);
или
$detils = array_delete('orange', $detils);
Он также переиндексирует его.
будет выглядеть так:
function rmv_val($var) { return(!($var == 'strawberry')); } $array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi'); $array_res = array_filter($array, "rmv_val");
возможно, лучшим подходом было бы сохранить ваши значения в качестве ключей в ассоциативном массиве, а затем вызвать
array_keys()
на нем, когда вы хотите, чтобы фактический массив. Таким образом, вам не нужно использоватьarray_search
найти свой элемент.
ответ PHP-массив удалить по значению (не ключ) Дано https://stackoverflow.com/users/924109/rok-kralj
IMO-лучший ответ, поскольку он удаляет и не мутирует
array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 3]
Он хорошо обобщает, вы можете удалить столько элементов, сколько вам нравится, в то же время, если хотите.
отказ от ответственности: обратите внимание, что мое решение создает новую копию массива, сохраняя при этом старый нетронутыми в отличие от принятого ответ, который мутирует. Это может быть немного медленнее из-за этого.
этот вопрос имеет несколько ответов, но я хочу добавить что-то более потому что, когда я использовал
unset
илиarray_diff
у меня было несколько проблем, чтобы играть с индексами нового массива, если элемент был удален (потому что начальный индекс сохраняются)Я возвращаюсь к примеру:
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi'); $array_without_strawberries = array_diff($array, array('strawberry'));
или
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi'); unset($array[array_search('strawberry', $array)]);
если вы напечатаете результат, вы получите:
foreach ($array_without_strawberries as $data) { print_r($data); }
результат :
> apple > orange > blueberry > kiwi
но индексы будьте сохранены, и поэтому вы получите доступ к своему элементу, например:
$array_without_strawberries[0] > apple $array_without_strawberries[1] > orange $array_without_strawberries[3] > blueberry $array_without_strawberries[4] > kiwi
и поэтому окончательный массив не переиндексируется. Так что вам нужно добавить после
unset
илиarray_diff
:$array_without_strawberries = array_values($array);
после этого Ваш массив будет иметь нормального индекса :
$array_without_strawberries[0] > apple $array_without_strawberries[1] > orange $array_without_strawberries[2] > blueberry $array_without_strawberries[3] > kiwi
связанные с этим сообщением:Re-Index Array
надеюсь, что это поможет
Я бы предпочел использовать array_key_exists для поиска ключей в массивах, таких как:
Array([0]=>'A',[1]=>'B',['key'=>'value'])
чтобы найти указанный эффективно, так как array_search и in_array () здесь не работают. И сделать удаление вещи с unset ().
Я думаю, что это поможет кому-то.
создать числовой массив с удалить конкретное значение массива
<?php // create a "numeric" array $animals = array('monitor', 'cpu', 'mouse', 'ram', 'wifi', 'usb', 'pendrive'); //Normarl display print_r($animals); echo "<br/><br/>"; //If splice the array //array_splice($animals, 2, 2); unset($animals[3]); // you can unset the particular value print_r($animals); ?>
$remove= "strawberry"; $array = ["apple", "orange", "strawberry", "blueberry", "kiwi"]; foreach ($array as $key => $value) { if ($value!=$remove) { echo $value.'<br/>'; continue; } }
<?php $array = array("apple", "orange", "strawberry", "blueberry", "kiwi"); $delete = "strawberry"; $index = array_search($delete, $array); array_splice($array, $index, 1); var_dump($array); ?>
используя
array_seach()
, попробуйте следующее:if(($key = array_search($del_val, $messages)) !== false) { unset($messages[$key]); }
array_search()
возвращает ключ элемента, который он находит, который может быть использован для удаления этого элемента из исходного массива с помощьюunset()
. Он вернетсяFALSE
при неудаче, однако он может вернуть значение "falsey" при успехе (ваш ключ может быть0
например), поэтому строгое сравнение оператор.The
if()
заявление будет проверить, является лиarray_search()
возвращаемое значение, и будет выполнять только действие, если это произошло.