本帖最后由 q5975166 于 2014-07-07 19:49:42 编辑

解决方案 »

  1.   

    $peistr 這個可以打印出來看看嗎?
      

  2.   

    如果选择了 209的子项
    打印$peistr的结果
    Array ( 
    [0] => 208
    [1] => 
    [2] => 
    [3] => 
    [4] =>
    [5] =>
    [6] => 

    打印$liestr的结果
    Array (
     [0] => 209
     [1] =>
     [2] => 
     [3] =>
     [4] =>
     [5] =>
     [6] => 

    选择了 209的子项之后,再选择30的子项
    打印$peistr的结果
    Array ( 
    [0] => 208
    [1] => 
    [2] => 6
    [3] => 
    [4] =>
    [5] =>
    [6] => 

    打印$liestr的结果
    Array (
     [0] => 209
     [1] =>
     [2] => 30
     [3] =>
     [4] =>
     [5] =>
     [6] => 

    数组里最后两个,也就是键名是5,6的,是没用的,也就是为什么在for循环里要减2。其实商品筛选里只有5个选项,下面再分子项。按我这么来选的话符合条件的应该只有id为3的。 
    我上面写的这个条件
    if($liestr[$i]==$dddvalue){/
     $strpei2.=$dvalue['id'].",";

    是把所有的符合条件的都算了进去
    也就是208的子项,id为1也有,id为3的也有。所有他把这两个id的数据都查了出来
      

  3.   

    我想到了一个思路,就是$peistr 的数组接收第一次时,只有一个索引有值。接收第二次时,有两个索引有值。那么就可以判断第一次接收的时候,就判断这一个值。第二次接收的时候,就同时判断两个值。以此类推。但是具体怎么写还没想出来
      

  4.   

    还有一个想法是   接收第一次时,符合条件的产品的id就会加入条件里。接收第二次时,如果在原来的id里有的话,也就是增加了的话。那么就把该条ID加入条件里
      

  5.   

    我把判断改了一下
    if($liestr[$i]==$dddvalue){
     $strpei2.=$dvalue['id'].",";

    $where.="$liestr[$i]==$dddvalue &&";
    if($i==(count($peistr)-2)){
    $where= substr($where,0,-2);
    }
    if($where){
    $strpei2.=$dvalue['id'].",";
    }但是这样的话,$where他是一个字符串来放到if里判断的。不能进行判断处理  无论是什么$where都是1。这只是一个思路,你看看吧
      

  6.   

    我又想到了一个方法,把子项的id放到一个字段里,用FIND_IN_SET来查询,每查询一次后面就加上 and  FIND_IN_SET ,把接收到的子项id在字段里查询,这样就OK了。