CodeIgniter视图遍历模型返回数组:print_r输出异常问题咨询
问题原因分析
你遇到的输出异常,核心是foreach遍历的用法搞错了!
你当前写的foreach($ot as $key),这里的$key其实是取到$ot数组里的每个元素值,而不是你以为的键名(senin/selasa/rabu)。所以输出的三个结果依次是:
senin对应的空结果数组(因为$senin->result()没查到数据)selasa对应的包含stdClass对象的结果数组rabu对应的结果数组
这完全不是你想要的遍历逻辑——你应该是想按天(senin/selasa/rabu)来展示对应的数据对吧?
正确的遍历处理方法
方法1:按天遍历(区分每一天的名称和数据)
这是最贴合你需求的写法,能拿到每一天的名称和对应的数据:
<?php foreach($ot as $dayName => $dayRecords): ?> <h3><?= ucfirst($dayName) ?></h3> <?php if(empty($dayRecords)): ?> <p>Tidak ada data untuk hari ini</p> <?php else: ?> <ul> <?php foreach($dayRecords as $record): ?> <li> Shift 1: <?= $record->shift1 ?>, Shift 2: <?= $record->shift2 ?> <!-- 其他属性比如id_genba、hari也可以这样调用 --> </li> <?php endforeach; ?> </ul> <?php endif; ?> <?php endforeach; ?>
代码说明:
$dayName会拿到senin/selasa/rabu这些键名,用来显示天的名称$dayRecords是当天对应的查询结果数组(就是模型里$senin->result()返回的内容)- 先判断
$dayRecords是否为空,避免空数组遍历导致的报错
方法2:直接遍历所有有效数据(不区分天)
如果不需要按天分组,只想展示所有有数据的班次记录,可以简化成:
<?php foreach($ot as $dayRecords): ?> <?php if(!empty($dayRecords)): ?> <?php foreach($dayRecords as $record): ?> <p>Hari: <?= $record->hari ?> | Shift1: <?= $record->shift1 ?> | Shift2: <?= $record->shift2 ?></p> <?php endforeach; ?> <?php endif; ?> <?php endforeach; ?>
额外提示
模型里的->result()方法返回的是对象数组,如果没有匹配数据就是空数组。所以在遍历内层数组之前,一定要做非空判断,否则当某一天没有数据时,内层foreach会抛出警告。
内容的提问来源于stack exchange,提问作者levia
相关产品推荐
相关产品推荐

