首頁 > 後端開發 > php教程 > 求教用TP做类似淘宝那种多级筛选用if语句控制发现传一两个字段还好控制,传三个字段以上就不好控制了,筛选出来的数据就不对了。有什么好的方法吗?

求教用TP做类似淘宝那种多级筛选用if语句控制发现传一两个字段还好控制,传三个字段以上就不好控制了,筛选出来的数据就不对了。有什么好的方法吗?

WBOY
發布: 2016-06-20 12:53:10
原創
1069 人瀏覽過

      //多级筛选                                          $name=$_GET[pid];                     $brand=$_GET[theme];                     $carage=$_GET[price];                     echo $carage;                                        if($name="泵车" AND $brand="三一"){                     $handmebuyinfo=M("handmebuyinfo");                     $map['name']=$name;                     $map['brand']=$brand;                     //$map['carage']=$carage;                     $row=$handmebuyinfo->where($map)->select();                     dump($row);                     }                                                             if($name=='' OR $brand=='' OR $carage==''){                     $handmebuyinfo=M("handmebuyinfo");                     $map['name']=$name;                     $map['brand']=$brand;                     $map['carage']=$carage;                     $map['_logic'] = 'OR';                     $row=$handmebuyinfo->where($map)->select();                     dump($row);                     }
登入後複製


回复讨论(解决方案)

你的这种筛选是 与(and)关系
如果组内有多选的话,那么组内才是 或(or)关系,比如同时选中 泵车 和 搅拌车
不过你目前并无此需求

你使用了 ORM,所以拼装工作是由 ORM 完成的
你只需要保证不向其传递空参数就可以 $_GET = array_diff($_GET, array(''));
最好传入的变量名与对应字段同名,这样就不需要编程对应数据了
好像 TP 用个名称映射功能,可以用一下

你的这种筛选是 与(and)关系
如果组内有多选的话,那么组内才是 或(or)关系,比如同时选中 泵车 和 搅拌车
不过你目前并无此需求

你使用了 ORM,所以拼装工作是由 ORM 完成的
你只需要保证不向其传递空参数就可以 $_GET = array_diff($_GET, array(''));
最好传入的变量名与对应字段同名,这样就不需要编程对应数据了
好像 TP 用个名称映射功能,可以用一下

比较数组里的差集有点明白了,能给个例子让我看看吗?

$a = array(  'a' => 1,  'b' => '',  'c' => 0,);print_r(array_diff($a, array('')));print_r(array_diff($a, array('', 0)));
登入後複製
登入後複製
Array(    [a] => 1    [c] => 0)Array(    [a] => 1)
登入後複製
登入後複製
这样就不需要 if($name=='') 这样一个个判断了

$a = array(  'a' => 1,  'b' => '',  'c' => 0,);print_r(array_diff($a, array('')));print_r(array_diff($a, array('', 0)));
登入後複製
登入後複製
Array(    [a] => 1    [c] => 0)Array(    [a] => 1)
登入後複製
登入後複製
这样就不需要 if($name=='') 这样一个个判断了

总算搞出来了,一开始用
               //$map['name']='Null';
               //$map['brand']=$map[brand];
               //$map['carage']=$map[carage];
               $row=$handmebuyinfo->where($map)->select();
               dump($row);快捷查询查询不出数据,原来是这里面值不允许为空,所以去掉这些直接赋值查询就没问题了。
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板