
本文详解 PHP 中嵌套数组的正确构建方式,重点解决因错误赋值导致 addresseeList 被扁平化、JSON 输出结构失真的问题,并提供可直接运行的代码示例与关键注意事项。
本文详解 php 中嵌套数组的正确构建方式,重点解决因错误赋值导致 addresseelist 被扁平化、json 输出结构失真的问题,并提供可直接运行的代码示例与关键注意事项。
在 PHP 中,数组的声明方式直接影响最终 json_encode() 的输出结构。常见误区是试图在赋值过程中“混用键名层级”,例如将 'mobile' => '1111' 直接写在 $data['addresseeList'] 的初始化语句中——这会导致键被错误地挂载到根数组 $data 上,而非嵌套在 addresseeList 子数组内。
正确的做法是:始终将子结构作为一个完整关联数组,作为元素追加([])到目标键所指向的数组中。以下是推荐的构建方式:
$data = [];
$data['country'] = '+57';
$data['message'] = 'test';
$data['messageFormat'] = 0;
$data['addresseeList'][] = [
'mobile' => '1111',
'correlationLabel' => 'corelation ejemplo'
];
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);输出结果(格式化后):
{
"country": "+57",
"message": "test",
"messageFormat": 0,
"addresseeList": [
{
"mobile": "1111",
"correlationLabel": "corelation ejemplo"
}
]
}✅ 关键要点:
立即学习“PHP免费学习笔记(深入)”;
- 使用
$data['addresseeList'][] = [...]语法,确保新元素作为独立关联数组被推入addresseeList(它本身是一个索引数组,每个元素是一个对象/关联数组); - ❌ 避免写成
$data['addresseeList'] = array($data['mobile'] = '1111', ...)—— 这种写法会先执行$data['mobile'] = '1111',污染根数组,且array(...)内部的赋值表达式返回的是值(如字符串'1111'),最终导致addresseeList变成['1111', 'corelation ejemplo']; - 如需添加多个收件人,只需重复调用
$data['addresseeList'][] = [...]即可,PHP 会自动维护索引; - 建议始终启用
JSON_UNESCAPED_UNICODE(避免中文被转义)和JSON_PRETTY_PRINT(调试时提升可读性)。
通过严格区分数据层级与赋值作用域,即可精准控制 JSON 的嵌套结构,满足 API 接口或第三方服务对 payload 格式的严格要求。



















