大概是这么个思路,没有用类的方式,看懂就行function build_filter($mapParam, $mapConfig)
{
$arrFilter = [];
foreach($mapParam as $k => $v)
{
if(array_key_exists($k, $mapConfig) === false)
continue;
$op = $mapConfig[$k];
if(is_callable($op) === true)
{
$arr = call_user_func($op, $v);
foreach($arr as $filter)
array_push($arrFilter, $filter);
}
else
{
$arrFilter[] = [$k, $op, $v];
}
}
return $arrFilter;
}
$requestParams = [
'id' => 2,
'name' => 'test',
'dates' => '2020-11-01,2020-11-02',
];
$mapFilterConfig = [
'id' => '=',
'name' => '=',
'score' => '>',
'dates' => function($data){
$arrDate = explode(',', $data);
return [
['date', '>', $arrDate[0]],
['date', '
];
},
];
$arrFilter = build_filter($requestParams, $mapFilterConfig);
var_dump(json_encode($arrFilter, JSON_UNESCAPED_UNICODE));
输出 [["id","=",2],["name","=","test"],["date",">","2020-11-01"],["date","