带有或语句的php多键值过滤器

时间:2016-01-25 18:51:48

标签: php mysql arrays filter

我一直在寻找这个,我不确定这样的事情可以做到。但我希望有人可以指出我正确的方向。

我从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')));

我希望我在这里有点意义。

1 个答案:

答案 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
}