Как удалить элемент из массива, когда я знаю имя элемента? например:
У меня есть массив:
$array = (apple, orange, strawberry, blueberry, kiwi);
пользователь входит в strawberry
strawberry
удаляется.
Чтобы полностью объяснить:
У меня есть база данных, в которой хранится список элементов, разделенных запятой. Код втягивается в список на основе выбора пользователя, где этот выбор находится. Таким образом, если они выбирают клубнику, то код в каждой записи попадает в клубнику, а затем преобразует ее в массив с помощью split (). Я хочу, чтобы они удаляли выбранные пользователем элементы, для этого примера клубника, из массива.
Используйте array_search
чтобы получить ключ, и удалите его с помощью unset
если он найден:
if (($key = array_search('strawberry', $array)) !== false) { unset($array[$key]); }
сif (($key = array_search('strawberry', $array)) !== false) { unset($array[$key]); }
array_search
возвращает false ( null до PHP 4.2.0), если элемент не найден.
И если может быть несколько элементов с одинаковым значением, вы можете использовать array_keys
для получения ключей ко всем элементам:
foreach (array_keys($array, 'strawberry') as $key) { unset($array[$key]); }
с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 (in_array('strawberry', $array)) { unset($array[array_search('strawberry',$array)]); }
сif (in_array('strawberry', $array)) { unset($array[array_search('strawberry',$array)]); }
Если вы используете простой массив здесь (что похоже на случай), вы должны использовать этот код:
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']
По сравнению с отключением:
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi'); unset($array[2]); json_encode($array); // yields an object {"0": "apple", "1": "orange", "3": "blueberry", "4": "kiwi"}
с$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])
не изменяет порядок массива.
$arr = \array_filter($arr, function ($v) { return $v != 'some_value'; }
Это простое повторение, которое может удалить несколько значений в массиве.
// 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]); }
с// 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); }
с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); }
с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
для поиска вашего элемента.
Я бы предпочел использовать 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); ?>
не<?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); ?>
Вы можете посмотреть эту ссылку ..
Ответ на массив PHP для удаления по значению (не ключ). Предоставлено https://stackoverflow.com/users/924109/rok-kralj
IMO – лучший ответ, поскольку он удаляет и не мутирует
array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 3]
Это хорошо обобщает, вы можете удалить столько элементов, сколько хотите, в то же время, если хотите.
Отказ от ответственности: обратите внимание, что мое решение создает новую копию массива, сохраняя прежнюю неповрежденную, в отличие от принятого ответа, который мутирует. Из-за этого может быть немного медленнее.
$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()
, попробуйте array_seach()
следующее:
if(($key = array_search($del_val, $messages)) !== false) { unset($messages[$key]); }
этаif(($key = array_search($del_val, $messages)) !== false) { unset($messages[$key]); }
неif(($key = array_search($del_val, $messages)) !== false) { unset($messages[$key]); }
array_search()
возвращает ключ array_search()
элемента, который может быть использован для удаления этого элемента из исходного массива с помощью unset()
. Он вернет FALSE
при сбое, однако он может вернуть значение «falsey» при успешном завершении (например, ваш ключ может быть 0
), поэтому используется оператор строгого сравнения !==
.
Оператор if()
будет проверять, array_search()
ли значение array_search()
значение, и выполнит действие только в том случае, если это произойдет.
unset($array[array_search('strawberry', $array)]);
$ delete = "клубника";
$ index = array_search ($ delete, $ array);
array_splice ($ array, $ index, 1);
$detils = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi'); function remove_embpty($values) { if($values=='orange') { $values='any name'; } return $values; } $detils=array_map('remove_embpty',$detils); print_r($detils);