【发布时间】:2016-06-30 12:00:27
【问题描述】:
我不确定我是否在这里使用了正确的术语,但我会尝试解释。我正在使用 PHP 的 array_filter 函数来过滤产品,它会回调我在其中添加过滤器的自定义函数。我可以很容易地进行硬编码,但我显然希望它是动态的:
长话短说,自定义过滤器函数返回到 array_filter() 函数,如下所示:
return ($arr['colour']=='Red' || $arr['colour']=='White');
如果像上面那样硬编码,这可以正常工作,并按预期过滤数组以仅显示红色或白色的产品。但是,我需要它是动态的。
那么如何构造一个值的字符串,然后在 return 语句中使用它呢?
例如:
$var = "$arr['colour'] == 'Red' || $arr['colour'] == 'White'";
return ($var);
它不起作用。我试过用 eval() (反正我不想用这个!),还是不行。
我有一个循环如下从数组构造字符串:
// $value=array of filters e.g colour=Black, colour=Red
$filterparts = explode("=", $value);
$filters[] = '$arr[\'' . $filterparts[0] . '\'] == \'' . $filterparts[1] . '\'';
// Creates array e.g $arr['colour'] = 'Red'
$imploded_filter = implode(" || ", $uniquefilters);
// Creates string, e.g. $arr['colour'] = 'Red' || $arr['colour'] = 'White'
所以,如果我回显 $imploded_filter 我会得到我想要返回的提取字符串:
echo $imploded_filter;
// Outputs $arr['colour'] = 'Red' || $arr['colour'] = 'White'
如果我这样做了
return($imploded_filter);
它显然没有将字符串评估为硬代码,那我该怎么办?我需要对字符串做些什么或以不同的方式返回它,还是构建我需要以完全不同的方式返回的代码?
【问题讨论】:
标签: php arrays string eval array-filter