在变量php中保存表达式

时间:2017-09-20 13:35:22

标签: php regex

我试图将表达式存储在变量中,然后在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有没有办法做到这一点?或者更好的方式,然后我试图实现的那个。

1 个答案:

答案 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()解释为正则表达式。