foreach没有抓住所有记录

时间:2015-08-26 02:31:07

标签: php laravel-5 eloquent

在我的控制器中,我有:

    $level1Navs = tblPages::where('pgeParent','=',0)->orderBy('pgeOrder','ASC')->orderBy('pgeTitle','ASC')->get();
    var_dump($level1Navs);
    foreach($level1Navs as $level1Nav) {
        $navbar = array();
        $navbar['pgeID'] = $level1Nav->pgeID;
        $navbar['pgeTitle'] = $level1Nav->pgeTitle;
        $navbar['pgeContent'] = $level1Nav->pgeContent;
        $navbar['pgeMainLevel'] = $level1Nav->pgeMainLevel;
        $navbar['level2'] = array();

        $level2Navs = tblPages::where('pgeParent','=',$level1Nav->pgeID)->where('pgeActive','=',1)->orderBy('pgeOrder','ASC')->orderBy('pgeTitle','ASC')->get();
        foreach($level2Navs as $level2Nav) {
            $navbar['level2']['pgeID'] = $level2Nav->pgeID;
            $navbar['level2']['pgeTitle'] = $level2Nav->pgeTitle;
            $navbar['level2']['pgeContent'] = $level2Nav->pgeContent;
            $navbar['level2']['pgeMainLevel'] = $level2Nav->pgeMainLevel;
            $navbar['level2']['level3'] = array();

            $level3Navs = tblPages::where('pgeParent', '=', $level2Nav->pgeID)->where('pgeActive', '=', 1)->orderBy('pgeOrder', 'ASC')->get();
            foreach ($level3Navs as $level3Nav) {
                $navbar['level2']['level3']['pgeID'] = $level3Nav->pgeID;
                $navbar['level2']['level3']['pgeTitle'] = $level3Nav->pgeTitle;
                $navbar['level2']['level3']['pgeContent'] = $level3Nav->pgeContent;
                $navbar['level2']['level3']['pgeMainLevel'] = $level3Nav->pgeMainLevel;

            }
        }
    }

    var_dump($navbar);

第一级有9个项目,但是当它到达var_dump时,我只能得到这个:

array (size=5)
  'pgeID' => string '10' (length=2)
  'pgeTitle' => string 'News' (length=4)
  'pgeContent' => string '0' (length=1)
  'pgeMainLevel' => string '10' (length=2)
  'level2' => 
    array (size=5)
      'pgeID' => string '50' (length=2)
      'pgeTitle' => string 'News Stories' (length=12)
      'pgeContent' => string '1' (length=1)
      'pgeMainLevel' => string '10' (length=2)
      'level3' => 
        array (size=0)
          empty

它只是一次只穿过每个foreach。

我错过了一些简单的东西吗?

1 个答案:

答案 0 :(得分:1)

你的例子只是一直在覆盖自己。您要重置$navbar['level2']项的第一个数组的每次迭代。它会覆盖自己,因为你调用$navbar['level2'] = array();来完成你在第二次和第三次迭代中所做的一切,然后将它设置回一个空白数组。

您必须通过附加(推送)到每个嵌套数组来构建数组,如:

$navbar['level2']['pgeID'][] = $level2Nav->pgeID;

在实例化这样的数组之前,还要检查数组是否存在:

if( is_array($navbar['level2']) === false ) {
    $navbar['level2'] = array();
}