我有以下数组。对于以下两种情况,我如何删除(取消设置)其中的所有元素?
我显然可以迭代数组,并检查是否有匹配,但我希望有更有效的方法。
Array
(
[0] => obj Object
(
[prop] => a
)
[1] => obj Object
(
[prop] => b
)
[2] => obj Object
(
[prop] => a
)
[3] => obj Object
(
[prop] => d
)
)
答案 0 :(得分:3)
array_filter
(PHP documentation here)可能就是最佳解决方案。
它当然会迭代你的数组,但它将迭代逻辑与过滤逻辑分开,使得维护代码变得更容易。
function filter_on_prop($val) {
$arr = ['a', 'b'];
return (!in_array($val->prop, $arr));
}
$array = array_filter ($array, 'filter_on_prop');
使用匿名函数:
$array = array_filter ($array, function ($val) use ($filter) {
return (!in_array($val->prop, $filter));
});
$filter
是您之前选择/填充的数组,以检查您想要的任何内容。
答案 1 :(得分:0)
您可以使用array_filter:
$allowedProps = array('a','d');
$myfilter = function($val) use ($allowedProps)
{
return !in_array($val->prop, $allowedProps);
}
$myfilteredArray = array_filter($array, $myFilter);