跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

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

//多级筛选 $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);快捷查询查询不出数据,原来是这里面值不允许为空,所以去掉这些直接赋值查询就没问题了。

相关文章