您好,欢迎访问一九零五行业门户网

求教用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);快捷查询查询不出数据,原来是这里面值不允许为空,所以去掉这些直接赋值查询就没问题了。
其它类似信息

推荐信息