我有一个PHP数组如下:

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

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

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


当前回答

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

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

其他回答

如果你不知道它的键,那就意味着它无关紧要。

你可以将值作为键,这意味着它会立即找到值。比在所有元素中反复搜索要好。

$messages=array();   
$messages[312] = 312;    
$messages[401] = 401;   
$messages[1599] = 1599;   
$messages[3] = 3;    

unset($messages[3]); // no search needed

如果你明确知道你的数组将只包含一个具有该值的元素,你可以这样做

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

但是,如果您的值可能在数组中出现多次,则可以这样做

$array = array_filter($array, function($e) use ($del_val) {
    return ($e !== $del_val);
});

注意:第二个选项只适用于带有闭包的PHP5.3+

在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的元素。

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

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