codeigniter查询结果默认为对象,需转数组时首选result_array()直接获取二维关联数组;已得对象可用(array)$row或array_map批量转换;json输出时json_encode可直接处理对象,无需强制转数组。

CodeIgniter 查询结果默认是对象(stdClass),但很多场景下需要数组格式,比如 JSON 输出、与第三方库兼容、或配合某些 PHP 函数(如 array_merge、foreach 键值遍历)使用。转换方法简单直接,关键在于选择合适的方式和时机。
使用 result_array() 直接获取数组结果
这是最常用、最推荐的方式——在查询时就指定返回数组,避免后续转换。
-
$this->db->get('users')->result_array();:返回二维关联数组,每条记录是一个子数组 -
$this->db->query("SELECT * FROM users")->result_array();:对原始 SQL 同样适用 - 注意:该方法仅适用于
SELECT查询,且不支持链式调用中混用result()和result_array()
将对象结果手动转为数组(适用于已得对象)
如果已经调用了 result() 得到对象数组,可用以下方式批量转换:
- 单条记录:
(array) $row;—— 强制类型转换,适用于单个stdClass对象 - 多条记录:
array_map(function($obj) { return (array)$obj; }, $query->result()); - 更稳妥的递归转换(含嵌套对象)可自定义函数,但 CI 场景中一般无需嵌套,简单强制转换足够
全局配置默认返回数组(不推荐,慎用)
CodeIgniter 本身不提供全局开关,但可通过封装模型方法统一处理:
- 在模型中定义通用查询方法,内部统一调用
result_array() - 例如:
public function get_all($table) { return $this->db->get($table)->result_array(); } - 避免修改核心文件(如
DB_result.php),否则升级易出问题
JSON 输出时的小技巧
若最终目标是输出 JSON,其实无需显式转数组:json_encode() 默认可正确序列化 stdClass 对象为 JSON 对象,与关联数组输出效果一致。
- 对象结果:
json_encode($query->result())→ 输出 JSON 数组(含对象元素) - 数组结果:
json_encode($query->result_array())→ 同样输出 JSON 数组(含关联对象) - 区别仅在 PHP 层数据结构,JSON 字符串表现通常无差异











