[英]php Multiple Key Value Filter with an or statement
我一直在到处寻找这个,但我不确定是否可以做到这一点。 但我希望有人能指出正确的方向。
我从mysql获取多维数组。 我需要过滤此数组,所以我正在使用以下代码
$filter = new MultipleKeyValueFilter(array(
'sex' => '1',
'age' => '4'
));
print_r(array_filter($ads_array, array($filter, 'filter')));
如您所见,我已经设置了过滤器值,但是我需要这些值来做这样的事情
$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,两者都很好。 但是当我尝试这个时,我什么也没得到。 因此,看来我不能使用or,也不能||。
我应该如何处理这个问题。 我怎样才能接受两个值作为一个好的结果?
我正在使用的其他代码是这些
class MultipleKeyValueFilter implements Filter {
protected $kvPairs;
public function __construct($kvPairs) {
$this->kvPairs = $kvPairs;
}
public function filter($item) {
$result = true;
foreach ($this->kvPairs as $key => $value) {
if ($item[$key] !== $value)
$result &= false;
}
return $result;
}
}
class MultipleKeyComparator implements Comparator {
protected $keys;
public function __construct($keys) {
$this->keys = $keys;
}
我希望我在这里有点道理。
它不起作用的原因是因为当您说:
'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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.