我有一个PHP数组如下:
$messages = [312, 401, 1599, 3, ...];
我想删除包含值$del_val的元素(例如,$del_val=401),但我不知道它的键。这可能会有帮助:每个值只能在那里出现一次。
我正在寻找执行这项任务的最简单的函数。
我有一个PHP数组如下:
$messages = [312, 401, 1599, 3, ...];
我想删除包含值$del_val的元素(例如,$del_val=401),但我不知道它的键。这可能会有帮助:每个值只能在那里出现一次。
我正在寻找执行这项任务的最简单的函数。
当前回答
从数组中删除一个元素基本上就是设置一个元素的差异。
array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 3]
它很好地泛化了,你可以同时删除任意多的元素,如果你想的话。
免责声明:请注意,我的解决方案产生了一个新的数组副本,同时保持旧的完整,与变异的接受答案形成对比。选一个你需要的。
其他回答
从数组中删除一个元素基本上就是设置一个元素的差异。
array_diff( [312, 401, 15, 401, 3], [401] ) // removing 401 returns [312, 15, 3]
它很好地泛化了,你可以同时删除任意多的元素,如果你想的话。
免责声明:请注意,我的解决方案产生了一个新的数组副本,同时保持旧的完整,与变异的接受答案形成对比。选一个你需要的。
function array_remove_by_value($array, $value)
{
return array_values(array_diff($array, array($value)));
}
$array = array(312, 401, 1599, 3);
$newarray = array_remove_by_value($array, 401);
print_r($newarray);
输出
Array ([0] => 312 [1] => 1599 [2] => 3)
$fields = array_flip($fields);
unset($fields['myvalue']);
$fields = array_flip($fields);
如果你明确知道你的数组将只包含一个具有该值的元素,你可以这样做
$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+
在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));