我有一个PHP数组如下:

$messages = [312, 401, 1599, 3, ...];

我想删除包含值$del_val的元素(例如,$del_val=401),但我不知道它的键。这可能会有帮助:每个值只能在那里出现一次。

我正在寻找执行这项任务的最简单的函数。


当前回答

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]

最好的部分是您可以轻松地过滤多个值,即使相同的值出现了多次。

其他回答

function array_remove_by_value($array, $value)
{
    return array_values(array_diff($array, array($value)));
}

$array = array(312, 401, 1599, 3);

$newarray = array_remove_by_value($array, 401);

print_r($newarray);

输出

Array ([0] => 312 [1] => 1599 [2] => 3)

从数组中删除一个元素基本上就是设置一个元素的差异。

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

它很好地泛化了,你可以同时删除任意多的元素,如果你想的话。

免责声明:请注意,我的解决方案产生了一个新的数组副本,同时保持旧的完整,与变异的接受答案形成对比。选一个你需要的。

使用or操作符的一行代码:

($key = array_search($del_val, $messages)) !== false or unset($messages[$key]);

在PHP 7.4中使用箭头函数:

$messages = array_filter($messages, fn ($m) => $m != $del_val);

为了保持它是一个非关联数组,用array_values()来包装它:

$messages = array_values(array_filter($messages, fn ($m) => $m != $del_val));

你可以:

unset($messages[array_flip($messages)['401']]);

解释:在翻转数组后删除键为401的元素。