注册 登录
编程论坛 PHP技术论坛

求教 FOREACH 嵌套中二级循环怎样避免重复读取?

zhuarji 发布于 2014-05-04 11:19, 7700 次点击
我做了一个mysql数据表,用aa作表名称吧,有以下数据:

id    AID    name
1      0     广东
2      1     广州
3      1     深圳
4      0     广西
5      4     梧州
6      4     桂林
7      0     福建
8      7     福州
9      7     夏门

当用以下代码读取时(在discuz中用的):

$result1=DB::query("select * from ".DB::table('aa')." where AID=0 order by id");
    while($list1=DB::fetch($result1)){
        $L1[]=$list1;
    }
    foreach($L1 as $vo1){
        echo $vo1['name']."<br>";
        $result2=DB::query("select * from ".DB::table('aa')." where AID=".$vo1['AID']." order by id");
        while($list2=DB::fetch($result2)){
            $L2[]=$list2;
        }
        foreach($L2 as $vo2){
            echo "&nbsp;&nbsp;".$vo2['name']."<br>";
        }
    }
}
本来想要的结果是:
广东
  广州
  深圳
广西
  梧州
  桂林
福建
  福州
  夏门

可实际读取出来的结果是:

广东
  广州
  深圳
广西
  广州
  深圳
  梧州
  桂林
福建
  广州
  深圳
  梧州
  桂林
  福州
  夏门

另外作了一次这样的调试:

$result2=DB::query("select * from ".DB::table('aa')." where AID=".$vo1['AID']." order by id");
改成:
$result2=DB::query("select * from ".DB::table('aa')." where AID=1 order by id");
其他不变,如果显示是:
广东
  广州
  深圳
广西
  广州
  深圳
  广州
  深圳
福建
  广州
  深圳
  广州
  深圳
  广州
  深圳

由此可以看出,第一层foreach是正常运行的,第二层foreach出现问题。
请问为什么会这样?如何才能得到本来想的结果?谢谢指教,衷心感谢!

[ 本帖最后由 zhuarji 于 2014-5-4 11:21 编辑 ]
4 回复
#2
zhuarji2014-05-04 16:15
问题解决了。第二层不再用foreach循环,改回正统的mysql语句就OK了、只是对于二层foreach为何会出现此种情况,还是不明白。希望高手们多多指教。
#3
asmdaydream2014-05-05 09:01
没用过dz , 可以把sql语句打印出来,拿出来跑下,看看查出来的结果是不是相同的
还有其它不用查数据库这么多次,查出结果后直接递归下更好

程序代码:

    function parent_child_sort($array=null, $pid=0, $primarykey, $parentkey)
    {
        $arr = array();
        foreach ($array as $value) {
            if ($value["$parentkey"] == $pid){   
                $prefix = '';
                for($i=$level;$i>0;$i--) $prefix .= '--&nbsp;';

                $value['name'] = $prefix.$value['name'];
                $arr[] = $value;
                $childarr = parent_child_sort($array, $value["$primarykey"],$level+1, $primarykey, $parentkey);
                $arr = array_merge($arr, $childarr);
            }
        }
        return $arr;
    }
   parent_child_sort($L1, 0, 'id', 'AID');
#4
康康侧面好看2014-05-20 02:37
#5
zhangyao32872014-05-26 16:38
程序代码:
$result1=DB::query("select * from ".DB::table('aa')." where AID=0 order by id");
     while($list1=DB::fetch($result1)){
         $L1[]=$list1;
     }
     foreach($L1 as $vo1){
         echo $vo1['name']."<br>";
         $result2=DB::query("select * from ".DB::table('aa')." where AID=".$vo1['AID']." order by id");
         while($list2=DB::fetch($result2)){
             $L2[]=$list2;
         }
         foreach($L2 as $vo2){
             echo "&nbsp;&nbsp;".$vo2['name']."<br>";
         }
        unset[$L2];
     }

 }
1