You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter视图遍历模型返回数组:print_r输出异常问题咨询

问题原因分析

你遇到的输出异常,核心是foreach遍历的用法搞错了!

你当前写的foreach($ot as $key),这里的$key其实是取到$ot数组里的每个元素值,而不是你以为的键名(senin/selasa/rabu)。所以输出的三个结果依次是:

  1. senin对应的空结果数组(因为$senin->result()没查到数据)
  2. selasa对应的包含stdClass对象的结果数组
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:30:07