
本文介绍如何将形如 `[{"32":{...}}, {"33":{...}}]` 的 json 数据,通过 php 解析并重构为直接以 `32`、`33` 等数字为键的扁平化关联数组,避免冗余层级,提升访问效率。
原始 JSON 是一个对象数组(array of objects),每个元素本身是一个以 ID(如 "32")为键的单键对象。json_decode($json, true) 忠实还原了该结构,因此得到两层嵌套:外层数字索引([0], [1]),内层才是目标键([32], [33])。这不是“错误”,而是 JSON 结构与预期 PHP 数组结构不匹配所致。
要获得可直接通过 $decoded[32] 访问的扁平结构,需对解码结果进行一次键值提取与合并。推荐使用 array_merge(...array_values()) 配合 array_map() 或更清晰的 foreach 手动归并:
⚠️ 注意事项: 若原始 JSON 中存在重复 ID(如两个 {"32":{...}}),后出现的会覆盖前者;如需保留全部,应改用 $flattened[$key][] = $value 形式构建多维数组。 不建议强行修改 JSON 源格式(如改为 {"32":{...},"33":{...}}),除非你完全控制数据生成端;服务端返回数组形式往往有其语义原因(如顺序敏感、分页结构等)。 array_merge(...array_values($decoded)) 在 PHP 5.6+ 可用,但可读性略低;显式 foreach 更易维护、调试。
最终,$flattened 是一个标准的关联数组,键为原始 JSON 中各对象的唯一字符串 ID(PHP 会自动转换为整型键),值为对应配置子数组——真正实现“所见即所得”的高效访问。










