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

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

WBOY
풀어 주다: 2016-06-20 12:53:10
원래의
1067명이 탐색했습니다.

      //多级筛选                                          $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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿