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