我一直在寻找这个,我不确定这样的事情可以做到。但我希望有人可以指出我正确的方向。
我从mysql获取一个多维数组。我需要过滤这个数组,所以我使用以下代码
width*4
我已经设置了过滤器值,但是我需要这些值来做这样的事情
$filter = new MultipleKeyValueFilter(array(
'sex' => '1',
'age' => '4'
));
print_r(array_filter($ads_array, array($filter, 'filter')));
正如您在上面的代码中看到的,我想将它们都保留在数组中。该字段可以有1或0,两者都很好。但是当我尝试这个时我什么都没得到。所以我似乎不能使用或者也不能使用||。
我该如何解决这个问题。我怎么能让它接受这两个值作为一个好结果?
我正在使用的其他代码是
$filter = new MultipleKeyValueFilter(array(
'sex' => '1' or '0',
'age' => '4'
));
echo "Filtered by multiple fields\n";
print_r(array_filter($ads_array, array($filter, 'filter')));
我希望我在这里有点意义。
答案 0 :(得分:1)
它不起作用的原因是因为当你说:
'sex' => '1' or '0',
被解释为内联条件,你结束了
'sex' => true,
如果您希望MultipleKeyValueFilter
执行您想要的操作,则必须更改条件数组和过滤器类。你想传递类似的东西:
'sex' => ['1', '0'], //1 and 0 are acceptable values
并将比较器重写为:
public function filter($item) {
foreach ($this->kvPairs as $key => $value) {
if(is_array($value) {
$match = false;
foreach($value as $v) {
$match = ($item[$key] === $v);
if($match) {
break; //If we find one match in our array, we can stop looking
}
}
} else {
$match = ($item[$key] === $value);
}
if(!$match) {
return false; //Any failure to match can stop immediately
}
}
return true; //If we get here, then we didn't fail to match any criteria
}