我有一个PHP数组如下:
$messages = [312, 401, 1599, 3, ...];
我想删除包含值$del_val的元素(例如,$del_val=401),但我不知道它的键。这可能会有帮助:每个值只能在那里出现一次。
我正在寻找执行这项任务的最简单的函数。
我有一个PHP数组如下:
$messages = [312, 401, 1599, 3, ...];
我想删除包含值$del_val的元素(例如,$del_val=401),但我不知道它的键。这可能会有帮助:每个值只能在那里出现一次。
我正在寻找执行这项任务的最简单的函数。
当前回答
这里有一个简单但可以理解的解决方案:
$messagesFiltered = [];
foreach ($messages as $message) {
if (401 != $message) {
$messagesFiltered[] = $message;
}
}
$messages = $messagesFiltered;
其他回答
接受的答案将数组转换为关联数组,因此,如果您希望将其作为与接受的答案的非关联数组,您可能也必须使用array_values。
if(($key = array_search($del_val, $messages)) !== false) {
unset($messages[$key]);
$arr = array_values($messages);
}
参考资料在这里
你可以:
unset($messages[array_flip($messages)['401']]);
解释:在翻转数组后删除键为401的元素。
如果你不知道它的键,那就意味着它无关紧要。
你可以将值作为键,这意味着它会立即找到值。比在所有元素中反复搜索要好。
$messages=array();
$messages[312] = 312;
$messages[401] = 401;
$messages[1599] = 1599;
$messages[3] = 3;
unset($messages[3]); // no search needed
在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));
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]
最好的部分是您可以轻松地过滤多个值,即使相同的值出现了多次。