PHP的:如何从数组中删除特定的元素?

当我知道元素名称时,如何从数组中删除元素? 例如:

我有一个数组:

$array = (apple, orange, strawberry, blueberry, kiwi); 

用户inputstrawberry

strawberry被删除。

要充分解释:

我有一个数据库存储由逗号分隔的项目列表。 代码根据select所在的用户select拉入列表中。 所以,如果他们select草莓,他们会在草莓所在的每一个条目中进行编码,然后使用split()将其转换为数组。 我希望他们从arrays中删除用户select的项目,例如草莓。

使用array_search获取密钥,如果find,则使用unset删除它:

 if (($key = array_search('strawberry', $array)) !== false) { unset($array[$key]); } 

如果没有find项目, array_search返回false (直到PHP 4.2.0为 )。

如果可以有多个具有相同值的项目,则可以使用array_keys获取所有项目的键:

 foreach (array_keys($array, 'strawberry') as $key) { unset($array[$key]); } 

使用array_diff()作为1行解决scheme:

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

…不需要额外的function或foreach循环。

 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])只会删除元素,但不会重新sortingplain数组。

假设我们有$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi')

json_encode(array_splice($array, 2, 1))产生['apple', 'orange', 'blueberry', 'kiwi']

json_encode(unset($array[2]))产生{"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]); } 

我目前正在使用这个function:

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

你可以input一个数组,或者只input一个string,这个元素应该被删除。 这样写:

 $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来find你的元素。

我宁愿使用array_key_exists在数组中search键:

Array([0]=>'A',[1]=>'B',['key'=>'value'])

find有效的指定,因为array_search和in_array()不在这里工作。 并用unset()去除东西。

我认为这会帮助别人。

用删除特定的数组值创build数组

  <?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

国际海事组织是最好的答案,因为它消除了,并没有改变

 array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 3] 

它很好地概括,你可以同时删除尽可能多的元素,如果你想。

免责声明:请注意,我的解决scheme产生了一个新的数组副本,同时保持旧的一个完整的对比,接受的答案变异。 因为这个可能会慢一些。

 $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()返回它find的元素的键,可以使用unset()从原始数组中删除该元素。 它将在失败时返回FALSE ,但是它可以在成功时返回“falsey”值(例如,您的键可能为0 ),这就是使用严格比较!==运算符的原因。

if()语句将检查array_search()是否返回一个值,并且只会执行一个操作。

 unset($array[array_search('strawberry', $array)]); 

$ delete =“strawberry”;

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