
本文详解如何将单个数据对象(如 JSON 对象或关联数组)安全、高效地追加到嵌套结构中的目标数组(如 data 字段),适用于 CodeIgniter 等框架下的 API 数据组装场景。
本文详解如何将单个数据对象(如 json 对象或关联数组)安全、高效地追加到嵌套结构中的目标数组(如 `data` 字段),适用于 codeigniter 等框架下的 api 数据组装场景。
在 PHP 开发中,尤其是构建 RESTful API 时,常需动态组装嵌套数据结构——例如每个部门(divisi)对应一个 data 数组,而该数组需在基础查询结果之上,额外追加计算得出的状态项(如 "status": "WIN")。关键在于:不能覆盖原有数据,而是原地扩展 data 子数组。
✅ 正确做法:使用数组赋值语法追加对象
PHP 提供两种简洁、高效的数组追加方式,均适用于关联数组(即“对象数组”):
- $array[] = $new_item; —— 推荐,语义清晰、性能优秀
- array_push($array, $new_item); —— 功能等价,但稍多一次函数调用开销
以你的实际代码为例,核心修改仅需一行:
public function detail_get() {
$divisi = $this->M_model->db_tbl_divisi();
$data = [];
foreach ($divisi as $row) {
// 获取原始 data 数组(如 [{"status":"MUNDUR","total":"0"}])
$i = $this->M_model->db_realisasi_divisi($row['divisi_kode']);
// ? 关键:将新对象(如 {"status":"WIN","total":"1"})追加到 $i 数组末尾
$i[] = $this->M_model->db_win_win($row['divisi_kode'], 'win');
// 组装最终结构
$data[] = [
'divisi' => $row['kode'],
'data' => $i
];
}
$this->set_response($data, 200);
}
⚠️ 注意事项与最佳实践
-
确保 $i 是数组类型:若 db_realisasi_divisi() 可能返回 null 或非数组,需前置校验,避免运行时错误:
$i = (array) $this->M_model->db_realisasi_divisi($row['divisi_kode']);
- 对象 vs 关联数组:PHP 中 JSON 解析后默认为关联数组(json_decode($json, true)),可直接用 [] 追加;若为标准对象(stdClass),需先转换:$i = (array) $i; 再追加。
- 保持数据一致性:确认 $win 返回结构与 $i 中其他元素一致(同为关联数组,含 status 和 total 键),否则前端解析可能出错。
- 避免重复追加:若循环内多次调用 $i[] = ...,请确保逻辑意图明确——本例中每个 divisi 仅追加一个 WIN 状态项。
? 总结
向嵌套对象数组的 data 字段追加新数据对象,本质是对子数组执行追加操作。使用 $array[] = $item 是最直观、可靠的方式。结合类型校验与结构统一,即可稳定输出符合预期的层级化响应数据,无需复杂工具或第三方库。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











