在我的控制器中,我有:
$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。
我错过了一些简单的东西吗?
答案 0 :(得分:1)
你的例子只是一直在覆盖自己。您要重置$navbar['level2']
项的第一个数组的每次迭代。它会覆盖自己,因为你调用$navbar['level2'] = array();
来完成你在第二次和第三次迭代中所做的一切,然后将它设置回一个空白数组。
您必须通过附加(推送)到每个嵌套数组来构建数组,如:
$navbar['level2']['pgeID'][] = $level2Nav->pgeID;
在实例化这样的数组之前,还要检查数组是否存在:
if( is_array($navbar['level2']) === false ) {
$navbar['level2'] = array();
}