当前位置: 代码迷 >> PHP >> 求,foreach遍历三维数组时只能遍历出第一个子级,这是为什么呢
  详细解决方案

求,foreach遍历三维数组时只能遍历出第一个子级,这是为什么呢

热度:19   发布时间:2016-04-28 17:39:31.0
求高手指点,foreach遍历三维数组时只能遍历出第一个子级,这是为什么呢?

<tbody>
<?php $count=0 ;$countParent=0 ; if(isset($monitorList)){ foreach($monitorList as $key=>$val){
?>
<tr class="treegrid-<?=$key+1+$count?>" style="cursor: pointer;">
<td><?=$val['id']?></td>
<td title=<?=$val['name']?> onclick="task(<?=$val['id']?>,'<?=$val['name']?>')"><?=Util::msubstr($val['name'],0,16,'gbk')?></td>
<td><?if(!empty($val[$key])){echo count($val[$key]);}else{echo $val['product_qty'];}?></td>
<td><?=date("Y-m-d ",strtotime($val['date_start']))?></td>
<td><?=$val['plan_director_name']?></td>

<td style="padding: 0px;">
<span><?switch($val['status']){case 1: echo '10%';break;case 9: echo '100%';default: echo ((intval($val['status'])-1)*20).'%';}?></span>
<div id="progressouter" style=" border:2px solid red; height:10px; width: 64px;display:block"><div id="progressinner" style="position: relative; width:<?switch($val['status']){case 1: echo '10';break;case 9: echo '100';default: echo ((intval($val['status'])-1)*20);}?>%; height:6px; background:#23bd00;"></div></div>
</td>
<td>
<a style="cursor: pointer;" onclick="window.location.href='/opt_monitoring/show.candor?plan_type=<?=$val['plan_type']?>&workcenter_id=<?=$val['workcenter_id']?>&plan_id=<?=$val['id']?>'" id="show">
查看</a>&nbsp;&nbsp;
</td>
</tr>
<?php 
$countParent=$key+1+$count;$child=0;
if(is_array($val[$key]))foreach($val[$key] as $v){    //这里只执行了一次
if($val['id']==$v['parent_id']){
$count=$count+1;$child=$child+1;
?>
<tr class="treegrid-<?echo $countParent+$child?> treegrid-parent-<?=$countParent?>">
<td><?=$v['id']?></td>
<td><?=Util::msubstr($val['name'],0,16,'gbk')?></td>
<td><?=1?></td>
<td><?=date("Y-m-d ",strtotime($v['date_start']))?></td>
<td><?=$val['plan_director_name']?></td>
<td style="padding: 0px;">
<span><?if($v['status']=='1'){echo '10%';}else if($v['status']=='9'){echo '100%';}else{ echo ((intval($v['status'])-1)*20).'%';}?></span>
<div id="progressouter" style=" border:2px solid red; height:10px; width: 64px;display:block"> <div id="progressinner" style="position: relative; width:<?if($v['status']=='1'){echo '10';}else if($v['status']=='9'){echo '100';}else{ echo ((intval($v['status'])-1)*20);}?>%; height:6px; background:#23bd00;"></div></div>
</td>
<td><?=$v['status']?></td>
</tr>
<?}
}
}}?>
</tbody>

------解决思路----------------------
不是特别清楚你的数据结构,检查一下这个条件有没有满足
if(is_array($val[$key]))
------解决思路----------------------
你的外层循环是 
foreach($monitorList as $key=>$val)
进入内层循环的条件是
if(is_array($val[$key])) 
不符合条件时,自然就没有输出



------解决思路----------------------
if (is_array($val)) { //判断$val的值是否是一个数组,如果是,则进入下层遍历
------解决思路----------------------
應該是
if (is_array($val)) 判斷是否有下一層