我试图将表达式存储在变量中,然后在array_filter中使用它来根据此值返回数据,例如
$condition = '== 100';
$test = array_filter($last,function ($data)use ($condition){
return $data['rating'] .$condition;
});
var_dump($test);
我尝试使用html_entity_decode($condition, ENT_QUOTES);
preg_replace( )
str_replace()
以及修剪以删除单引号但它没有工作
我有很多条件而且我不想多次写array_filter
有没有办法做到这一点?或者更好的方式,然后我试图实现的那个。
答案 0 :(得分:0)
我认为您正在考虑的数量有限的比较运营商。为简单起见,我将它们编号为def get_response(self):
if self.has_error:
self.response = {
'success': self.success,
'errors': self.errors
}
resp_status = status.HTTP_400_BAD_REQUEST
else:
resp_status = status.HTTP_200_OK
return Response(
self.response, status=resp_status, content_type=self.content_type
)
。它们将在过滤器回调函数中触发不同类型的比较:
0,1,2,...
修改:我通过funcion myfiltarr($arr,$operator,$value){
$test = array_filter($last,function ($data) use ($operator, $value){
$v=$data['rating'];
switch($operator) {
case 0: return $v == $value;
case 1: return $v < $value;
case 2: return $v > $value;
case 9: return preg_match($value,$v);
// to be extended ...
default: return true;
}
});
return $test
}
$test=myfiltarr($last,0,100); // test: "== 100"
var_dump($test);
$test=myfiltarr($last,9,'/^abc/'); // test: "match against /^abc/"
var_dump($test);
选项(比较代码:9)扩展了原始答案。此选项将给定的preg_match()
解释为正则表达式。