按数值删除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]
)。