我有一个PHP数组如下:
$messages = [312, 401, 1599, 3, ...];
我想删除包含值$del_val的元素(例如,$del_val=401),但我不知道它的键。这可能会有帮助:每个值只能在那里出现一次。
我正在寻找执行这项任务的最简单的函数。
我有一个PHP数组如下:
$messages = [312, 401, 1599, 3, ...];
我想删除包含值$del_val的元素(例如,$del_val=401),但我不知道它的键。这可能会有帮助:每个值只能在那里出现一次。
我正在寻找执行这项任务的最简单的函数。
当前回答
我知道这一点效率都没有,但它简单、直观、易于阅读。 因此,如果有人正在寻找一个不那么花哨的解决方案,可以扩展到更多的值,或更具体的条件。这是一个简单的代码:
$result = array();
$del_value = 401;
//$del_values = array(... all the values you don`t wont);
foreach($arr as $key =>$value){
if ($value !== $del_value){
$result[$key] = $value;
}
//if(!in_array($value, $del_values)){
// $result[$key] = $value;
//}
//if($this->validete($value)){
// $result[$key] = $value;
//}
}
return $result
其他回答
根据您的要求“每个值只能出现一次”,如果您只是想在数组中保持唯一的值,那么array_unique()可能就是您正在寻找的。
输入:
$input = array(4, "4", "3", 4, 3, "3");
$result = array_unique($input);
var_dump($result);
结果:
array(2) {
[0] => int(4)
[2] => string(1) "3"
}
接受的答案将数组转换为关联数组,因此,如果您希望将其作为与接受的答案的非关联数组,您可能也必须使用array_values。
if(($key = array_search($del_val, $messages)) !== false) {
unset($messages[$key]);
$arr = array_values($messages);
}
参考资料在这里
PHP 7.4或以上
function delArrValues(array $arr, array $remove) {
return array_filter($arr, fn($e) => !in_array($e, $remove));
};
如果你有数组as
$messages = [312, 401, 1599, 3];
你想从$messages数组中删除3,312, 你会这样做
delArrValues($messages, [3, 312])
它会返回
[401, 1599]
最好的部分是您可以轻松地过滤多个值,即使相同的值出现了多次。
使用or操作符的一行代码:
($key = array_search($del_val, $messages)) !== false or unset($messages[$key]);
我知道这一点效率都没有,但它简单、直观、易于阅读。 因此,如果有人正在寻找一个不那么花哨的解决方案,可以扩展到更多的值,或更具体的条件。这是一个简单的代码:
$result = array();
$del_value = 401;
//$del_values = array(... all the values you don`t wont);
foreach($arr as $key =>$value){
if ($value !== $del_value){
$result[$key] = $value;
}
//if(!in_array($value, $del_values)){
// $result[$key] = $value;
//}
//if($this->validete($value)){
// $result[$key] = $value;
//}
}
return $result