我有一个PHP数组如下:

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

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

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


当前回答

一个有趣的方法是使用array_keys():

foreach (array_keys($messages, 401, true) as $key) {
    unset($messages[$key]);
}

array_keys()函数接受两个额外的参数,只返回特定值的键,以及是否需要严格检查(即使用===进行比较)。

这也可以删除具有相同值的多个数组项(例如[1,2,3,3,4])。

其他回答

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

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

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

array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 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));

最好的方法是array_splice

array_splice($array, array_search(58, $array ), 1);

最佳理由请访问http://www.programmerinterview.com/index.php/php-questions/how-to-delete-an-element-from-an-array-in-php/

或者简单地说,手动方式:

foreach ($array as $key => $value){
    if ($value == $target_value) {
        unset($array[$key]);
    }
}

这是最安全的,因为你可以完全控制你的阵列