codeigniter中处理数组与字符串需来源明确、操作轻量、转换可控:数据库结果用result_array()或result()选择结构,用户输入用input类安全获取,配置数据用implode/array_filter转换,api输出须类型校验并设置utf-8头。

CodeIgniter 中处理项目数组与字符串,核心在于“来源明确、操作轻量、转换可控”。数据库查询结果、用户输入、配置数据等不同来源的数据,需按其结构和用途选择对应方法,避免直接 json_encode 或硬编码拼接。
数据库查询结果的数组处理
从数据库获取的数据默认是对象数组或关联数组,常需结构重塑或类型转换:
- result_array() 返回纯 PHP 关联数组,适合后续 foreach 遍历和字段映射;result() 返回对象数组,适合属性访问(如 $row->date_issued)
- 批量转换日期和数值时,不建议在视图层处理。应在控制器或模型中完成:用
strtotime($row['date_issued']) * 1000转毫秒时间戳,用(float)$row['grand_total']强转浮点数 - 构建嵌套二维数组(如 [[ts, val], [ts, val]])时,推荐用
array_map()或显式 foreach,避免嵌套循环出错。例如:$price_data = array_map(function($r) { return [strtotime($r['date_issued']) * 1000, (float)$r['grand_total']]; }, $invoices);
用户输入与表单数据的字符串安全处理
POST/GET 数据不是原始字符串,而是经 Input 类预处理后的可信值:
- 用
$this->input->post('field')替代$_POST['field'],自动判空、防未定义索引 - 字符串清洗应分场景:前端展示前用
html_escape()(需先加载 html helper),存储前用框架自动过滤(如 XSS 过滤已默认启用) - 截取、限制长度推荐用 text 辅助函数:
$this->load->helper('text'); echo word_limiter($str, 50);,比 substr 更安全(不截断 HTML 标签)
配置与静态数据的数组/字符串转换
来自 config 文件、语言包或硬编码的数组,常用于下拉选项、状态映射等:
- 配置项若含多语言键名(如
'status' => ['draft'=>'草稿', 'published'=>'已发布']),可直接传给视图,用lang('status.'.$key)动态翻译 - 将数组转为逗号分隔字符串(如标签列表),用
implode(', ', $tags);反向解析用array_filter(array_map('trim', explode(',', $str))),自动去空格和空项 - 生成唯一标识符(如订单号前缀)可用 string 辅助函数:
$this->load->helper('string'); $prefix = random_string('alnum', 6);
JSON 输出前的最终校验与封装
API 响应不是简单 json_encode,而是结构+类型双保障:
- 确保数值字段是 int/float 类型(非字符串),否则前端图表库可能报错;时间戳必须为整型,不能带小数点
- 响应结构统一包装,例如:
['code'=>200, 'data'=>$price_data, 'msg'=>'success'],避免裸数组暴露内部逻辑 - 中文字符不乱码的关键:控制器中设置 header,
header('Content-Type: application/json; charset=utf-8');,再输出json_encode($output, JSON_UNESCAPED_UNICODE)











