CodeIgniter中如何访问视图中传递的对象数组数据?
这个问题我太熟了——CodeIgniter默认返回的查询结果是stdClass对象数组,不是你以为的关联数组,所以用数组下标$game['gameID']访问肯定会报错!给你两种最常用的解决方案,挑适合你的就行:
方案1:直接用对象属性语法访问(最快最直接)
不用改任何模型代码,直接在视图里把数组访问的语法改成对象属性访问的->符号就行。比如:
<?php foreach ($games as $game): ?> <div class="game-item"> 赛事ID:<?= $game->gameID ?> 比赛时间:<?= $game->match_time ?> <!-- 其他字段同理,注意属性名要和数据库字段完全一致,大小写敏感! --> </div> <?php endforeach; ?>
这里要注意:属性名就是你数据库表match_schedule里的字段名,比如字段是game_id就写$game->game_id,字段是gameID就写$game->gameID,别写错大小写。
方案2:修改模型,返回关联数组(适合习惯用数组的情况)
如果你就是习惯用数组下标访问,那可以在模型的getUpcomingGames()方法里,把查询结果的返回方式从默认的result()改成result_array(),这样返回的就是关联数组了:
public function getUpcomingGames() { // 假设你原来的查询逻辑是这样的 $this->db->where('match_time >', date('Y-m-d H:i:s')); // 示例:只查未开始的赛事 $query = $this->db->get('match_schedule'); // 把 result() 换成 result_array(),返回关联数组 return $query->result_array(); }
改完之后,你原来视图里的$game['gameID']写法就完全能用了,不用改视图代码。
临时应急小技巧(不推荐长期用)
如果有时候你不确定返回的是对象还是数组,或者临时需要转成数组,可以在遍历的时候强制类型转换:
foreach ($games as $game) { $game_arr = (array)$game; echo $game_arr['gameID']; }
不过这个只是临时救急,还是前面两种方案更规范。
内容的提问来源于stack exchange,提问作者Tim C
相关产品推荐
相关产品推荐

