我有一个PHP数组如下:
$messages = [312, 401, 1599, 3, ...];
我想删除包含值$del_val的元素(例如,$del_val=401),但我不知道它的键。这可能会有帮助:每个值只能在那里出现一次。
我正在寻找执行这项任务的最简单的函数。
我有一个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])。
其他回答
如果你明确知道你的数组将只包含一个具有该值的元素,你可以这样做
$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+
或者简单地说,手动方式:
foreach ($array as $key => $value){
if ($value == $target_value) {
unset($array[$key]);
}
}
这是最安全的,因为你可以完全控制你的阵列
这里有一个简单但可以理解的解决方案:
$messagesFiltered = [];
foreach ($messages as $message) {
if (401 != $message) {
$messagesFiltered[] = $message;
}
}
$messages = $messagesFiltered;
使用or操作符的一行代码:
($key = array_search($del_val, $messages)) !== false or unset($messages[$key]);
PHP 7.4或以上
function delArrValues(array $arr, array $remove) {
return array_filter($arr, fn($e) => !in_array($e, $remove));
};
如果你有数组as
$messages = [312, 401, 1599, 3];
你想从$messages数组中删除3,312, 你会这样做
delArrValues($messages, [3, 312])
它会返回
[401, 1599]
最好的部分是您可以轻松地过滤多个值,即使相同的值出现了多次。