PHP: Как удалить определенный элемент из массива?

Как удалить элемент из массива, когда я знаю имя элемента? например:

У меня есть массив:

$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);