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

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

WBOY
Freigeben: 2016-06-20 12:53:10
Original
1068 Leute haben es durchsucht

      //多级筛选                                          $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);                     }
Nach dem Login kopieren


回复讨论(解决方案)

你的这种筛选是 与(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)));
Nach dem Login kopieren
Nach dem Login kopieren
Array(    [a] => 1    [c] => 0)Array(    [a] => 1)
Nach dem Login kopieren
Nach dem Login kopieren
这样就不需要 if($name=='') 这样一个个判断了

$a = array(  'a' => 1,  'b' => '',  'c' => 0,);print_r(array_diff($a, array('')));print_r(array_diff($a, array('', 0)));
Nach dem Login kopieren
Nach dem Login kopieren
Array(    [a] => 1    [c] => 0)Array(    [a] => 1)
Nach dem Login kopieren
Nach dem Login kopieren
这样就不需要 if($name=='') 这样一个个判断了

总算搞出来了,一开始用
               //$map['name']='Null';
               //$map['brand']=$map[brand];
               //$map['carage']=$map[carage];
               $row=$handmebuyinfo->where($map)->select();
               dump($row);快捷查询查询不出数据,原来是这里面值不允许为空,所以去掉这些直接赋值查询就没问题了。
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage