我有一个PHP数组如下:

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

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

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


当前回答

接受的答案将数组转换为关联数组,因此,如果您希望将其作为与接受的答案的非关联数组,您可能也必须使用array_values。

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

参考资料在这里

其他回答

接受的答案将数组转换为关联数组,因此,如果您希望将其作为与接受的答案的非关联数组,您可能也必须使用array_values。

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

参考资料在这里

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

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

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

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

要删除多个值,试试这个:

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

这里有一个简单但可以理解的解决方案:

$messagesFiltered = [];
foreach ($messages as $message) {
    if (401 != $message) {
        $messagesFiltered[] = $message;
    }
}
$messages = $messagesFiltered;

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

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

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

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