Codeigniter中多重foreach循环分区域展示数据运行报错问题
问题原因
- 核心错误是第一个
foreach循环出现命名冲突:你的代码写为foreach ($tamu as $tamu),遍历数据源数组$tamu的同时,将循环临时变量也命名为$tamu。循环执行完成后,原有的$tamu结果集会被覆盖为最后一次循环的单条记录对象,第二个foreach尝试遍历已经不是数组/结果集的$tamu变量,就会抛出类型错误。 - 额外问题:代码中的
</div>标签没有对应开始标签,可能会导致前端页面渲染异常。
解决方法
修改第一个foreach的临时变量命名,避免覆盖原数组即可,修改后的视图代码如下:
<?php foreach ($tamu as $item) : ?> <button type="button" class="btn btn-success"><?php echo $item->gateA ?></button> </div> <?php endforeach;?> <?php foreach ($tamu as $item1) : ?> <button type="button" class="btn btn-success"><?php echo $item1->gateB ?></button> </div> <?php endforeach;?>
可选优化
如果你的需求是把所有gateA的按钮放在第一分区、所有gateB的按钮放在第二分区,可只做一次遍历提前缓存内容,减少结果集遍历次数:
<?php $gateA_content = ''; $gateB_content = ''; foreach ($tamu as $item) { $gateA_content .= '<button type="button" class="btn btn-success">'.$item->gateA.'</button></div>'; $gateB_content .= '<button type="button" class="btn btn-success">'.$item->gateB.'</button></div>'; } // 第一分区输出所有gateA按钮 echo $gateA_content; // 第二分区输出所有gateB按钮 echo $gateB_content; ?>
内容的提问来源于stack exchange,提问作者Triminor
相关产品推荐
相关产品推荐

