协慌网

登录 贡献 社区

PHP 数组按值删除(不是键)

我有一个 PHP 数组如下:

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

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

我正在寻找最简单的功能来执行此任务。

答案

使用array_search()unset ,请尝试以下操作:

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

array_search()返回它找到的元素的键,可以使用unset()从原始数组中删除该元素。它会在失败时返回FALSE ,但是它可以在成功时返回 false-y 值(例如,您的键可能为0 ),这就是使用严格比较!==运算符的原因。

if()语句将检查array_search()是否返回了值,并且只会执行操作。

好吧,从数组中删除一个元素基本上只是设置一个元素的差异

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

它很好地概括,如果你愿意,你可以同时删除任意数量的元素。

免责声明:请注意,我的解决方案会生成一个新的数组副本,同时保持旧数据的完整性与已接受的答案相反。由于这个原因,它可能会有点慢。

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

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

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

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