首页 > 代码片段 > 后端

同一字段多条件or查询url处理

时间:2020-07-17|浏览次数:98次
// 对多选的url进行处理转换 可以执行的查询
// url格式 search[acreage][]=15,40&search[acreage][]=40,50&search[acreage][]=50,60&search[price][]=2000,5000&search[price][]=5000,8000
$searches = [];
foreach (Yii::$app->getRequest()->get('search',[]) as $i=>$item){
    if(empty($item)) continue;
    $group = [];
    foreach ($item as $v){
        $group[] = $i.','.$v;
    }
    $searches[] = array_unique($group);
}

function filterHandel($searches,$index = 0,$parent = []){
    $arr = [];
    $count = count($searches)-1;
    foreach ($searches[$index] as $item){
        $curr = array_merge($parent,[$item]);
        if($count>$index){
            $arr = array_merge($arr,filterHandel($searches,$index+1,$curr));
        }else{
            $arr[] = $curr;
        }
    }
    return $arr;
}
// 处理成交叉数组
var_dump(filterHandel($searches));

// 打印结果
/* array(6) {
  [0] => array(2) {
    [0] => string(13) "acreage,15,40"
    [1] => string(15) "price,2000,5000"
  }
  [1] => array(2) {
    [0] => string(13) "acreage,15,40"
    [1] => string(15) "price,5000,8000"
  }
  [2] => array(2) {
    [0] => string(13) "acreage,40,50"
    [1] => string(15) "price,2000,5000"
  }
  [3] => array(2) {
    [0] => string(13) "acreage,40,50"
    [1] => string(15) "price,5000,8000"
  }
  [4] => array(2) {
    [0] => string(13) "acreage,50,60"
    [1] => string(15) "price,2000,5000"
  }
  [5] => array(2) {
    [0] => string(13) "acreage,50,60"
    [1] => string(15) "price,5000,8000"
  }
} */
// 此时把打印结果 组合成or语句就可以使用了