标题:求教 FOREACH 嵌套中二级循环怎样避免重复读取?
只看楼主
zhuarji
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-5-4
结帖率:0
已结贴  问题点数:20 回复次数:4 
求教 FOREACH 嵌套中二级循环怎样避免重复读取?
我做了一个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 编辑 ]
搜索更多相关主题的帖子: 深圳 where mysql 数据表 discuz 
2014-05-04 11:19
zhuarji
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-5-4
得分:0 
问题解决了。第二层不再用foreach循环,改回正统的mysql语句就OK了、只是对于二层foreach为何会出现此种情况,还是不明白。希望高手们多多指教。
2014-05-04 16:15
asmdaydream
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:中原
等 级:版主
威 望:13
帖 子:257
专家分:840
注 册:2009-5-10
得分:20 
没用过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');

常走夜路不怕黑 长沙PHP高薪招聘群6K+ 95926136
2014-05-05 09:01
康康侧面好看
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-5-20
得分:0 
2014-05-20 02:37
zhangyao3287
Rank: 2
来 自:黑龙江省
等 级:论坛游民
威 望:2
帖 子:173
专家分:51
注 册:2008-5-25
得分:0 
程序代码:
$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];
     }

 }
2014-05-26 16:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-430971-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.326117 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved