当我知道元素名称时,如何从数组中删除元素?例如:
我有一个数组:
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
用户输入strawberry
strawberry
已删除。
完全解释:
我有一个数据库,用于存储以逗号分隔的项目列表。代码根据该选项所在的用户选择拉入列表。因此,如果他们选择草莓,他们会在每个条目中提取代码,而草莓位于其中,然后使用split()将其转换为数组。我想让他们从数组中删除用户选择的项目,例如草莓。
答案 0 :(得分:259)
使用array_search
获取密钥,如果找到则将其与unset
一起删除:
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]);
}
答案 1 :(得分:122)
将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循环。
答案 2 :(得分:35)
if (in_array('strawberry', $array))
{
unset($array[array_search('strawberry',$array)]);
}
答案 3 :(得分:19)
如果你在这里使用普通数组(看起来就是这种情况),你应该使用这个代码:
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"}
注意unset($array[$key])
如何不对数组重新排序。
答案 4 :(得分:7)
$arr = \array_filter($arr, function ($v) { return $v != 'some_value'; }
答案 5 :(得分:4)
这是一个简单的重复,可以删除数组中的多个值。
// 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]);
}
答案 6 :(得分:3)
我目前正在使用此功能:
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);
OR
$detils = array_delete('orange', $detils);
它还会重新编制索引。
答案 7 :(得分:2)
将是这样的:
function rmv_val($var)
{
return(!($var == 'strawberry'));
}
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
$array_res = array_filter($array, "rmv_val");
答案 8 :(得分:2)
只需执行一行操作即可,它将是从数组中删除元素
$array=array_diff($array,['strawberry']);
答案 9 :(得分:1)
更好的方法可能是将值保存为关联数组中的键,然后在想要实际数组时调用array_keys()
。这样您就不需要使用array_search
来查找元素。
答案 10 :(得分:1)
这个问题有几个答案,但我想添加更多内容,因为当我使用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
希望它会有所帮助
答案 11 :(得分:1)
PHP array delete by value (not key)的答案 给定的 https://stackoverflow.com/users/924109/rok-kralj
IMO是最好的答案,因为它删除了并且没有变异
array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 3]
它很好地概括,如果你愿意,你可以同时删除任意数量的元素。
免责声明:请注意,我的解决方案会生成一个新的数组副本,同时保持旧数据的完整性与已接受的变异形式相反。因此可能会慢一些。
答案 12 :(得分:0)
<?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);
?>
答案 13 :(得分:0)
我更愿意使用 array_key_exists 来搜索数组中的键:
Array([0]=>'A',[1]=>'B',['key'=>'value'])
有效地找到指定的,因为array_search和in_array()在这里不起作用。并使用 unset()删除内容。
我认为这会对某人有所帮助。
答案 14 :(得分:0)
$remove= "strawberry";
$array = ["apple", "orange", "strawberry", "blueberry", "kiwi"];
foreach ($array as $key => $value) {
if ($value!=$remove) {
echo $value.'<br/>';
continue;
}
}
答案 15 :(得分:0)
<?php
$array = array("apple", "orange", "strawberry", "blueberry", "kiwi");
$delete = "strawberry";
$index = array_search($delete, $array);
array_splice($array, $index, 1);
var_dump($array);
?>
答案 16 :(得分:0)
我一直在寻找相同问题的答案,并且遇到了这个话题。我看到两种主要方式:array_search
和unset
的组合以及array_diff
的使用。乍一看,在我看来第一种方法会更快,因为它不需要创建其他数组(如使用array_diff
时)。但是我写了一个小的基准,并确保第二种方法不仅更简洁,而且更快!很高兴与您分享。 :)
答案 17 :(得分:0)
使用这种简单的方法希望会对您有所帮助
foreach($array as $k => $value)
{
if($value == 'strawberry')
{
unset($array[$k]);
}
}
答案 18 :(得分:0)
你可以试试这个
<?php
$array = array('apple', 'orange', 'strawberry', 'blueberry', 'kiwi');
$key = in_array("strawberry",$array);
if ($key) {
unset($array[$key]);
}
?>
答案 19 :(得分:-1)
$ delete =“strawberry”;
$ index = array_search($ delete,$ array);
array_splice($ array,$ index,1);
答案 20 :(得分:-1)
unset($array[array_search('strawberry', $array)]);
答案 21 :(得分:-1)
使用array_seach()
,尝试以下操作:
if(($key = array_search($del_val, $messages)) !== false) {
unset($messages[$key]);
}
array_search()
返回它找到的元素的键,可以使用unset()
从原始数组中删除该元素。它会在失败时返回FALSE
,但是它会在成功时返回“falsey”值(例如,您的密钥可能是0
),这就是使用严格比较!==
运算符的原因
if()
语句将检查array_search()
是否返回了值,并且只会执行操作。
答案 22 :(得分:-1)
foreach ($get_dept as $key5 => $dept_value) {
if ($request->role_id == 5 || $request->role_id == 6){
array_splice($get_dept, $key5, 1);
}
}
答案 23 :(得分:-2)
$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);