
本文讲解如何将一个包含字符串值的 JSON 数组(如 ["Charger", "Bag Only"])与一个 ID 映射关联数组合并,为每个对象动态添加 id 字段,最终生成结构化 JSON 输出。
本文讲解如何将一个包含字符串值的 json 数组(如 `["charger", "bag only"]`)与一个 id 映射关联数组合并,为每个对象动态添加 `id` 字段,最终生成结构化 json 输出。
在 PHP 开发中,常需将前端提交的选项列表(如多选配件名称)与后端预定义的 ID 映射表进行关联,从而构建带标识符的结构化数据。本例中,原始数据是一个 JSON 格式的字符串数组,每个元素为 {"value": "xxx"} 对象;而 $accessoriesID 是一个以配件名为键、ID 为值的关联数组。目标是遍历原始数组,查找匹配项并注入 id 字段。
实现的关键步骤如下:
- 解析原始 JSON 字符串:使用 json_decode($json, true) 将其转为可操作的 PHP 关联数组;
- 遍历并映射 ID:对每个子数组元素,提取 'value' 值,在 $accessoriesID 中查找对应 ID;
- 安全赋值:仅当键存在时才添加 'id' 键,避免 undefined index 警告;
- 重新编码为 JSON:使用 json_encode() 输出标准 JSON 字符串。
以下是完整、健壮的示例代码:
// 原始 JSON 字符串(模拟 $_POST['Acc'] 解析后的结果)
$arrAccesoriesJson = '[{"value":"Charger"},{"value":"Bag Only"},{"value":"Data Privacy Filter"},{"value":"Headset"}]';
$arrAccesories = json_decode($arrAccesoriesJson, true);
// 预定义的配件名 → ID 映射表
$accessoriesID = [
"Charger" => "11043",
"Mouse" => "11044",
"Bag With Strap" => "11045",
"Bag Only" => "11046",
"Cable Lock" => "11047",
"Data Privacy Filter" => "11048",
"Numeric Lock" => "11049",
"Headset" => "11050",
"HDMI to VGA adapter" => "11051",
"LAN Adapter" => "12223",
"Others (Please include in the remarks box below.)" => "11052"
];
// 遍历并注入 id 字段
foreach ($arrAccesories as &$item) {
$value = $item['value'] ?? null;
if ($value !== null && isset($accessoriesID[$value])) {
$item['id'] = $accessoriesID[$value];
} else {
// 可选:对未匹配项设默认值或跳过
$item['id'] = null; // 或 unset($item['id']) 跳过
}
}
unset($item); // 解除引用,防止意外修改
// 输出最终 JSON(注意:json_encode 默认不格式化,如需美化可加 JSON_PRETTY_PRINT)
echo json_encode($arrAccesories);
// 输出:[{"value":"Charger","id":"11043"},{"value":"Bag Only","id":"11046"},{"value":"Data Privacy Filter","id":"11048"},{"value":"Headset","id":"11050"}]✅ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 始终检查 json_decode() 返回值是否为 null(可用 json_last_error() 辅助调试);
- 使用 foreach ($arr as &$item) 引用赋值更简洁,但务必 unset($item) 避免后续循环污染;
- 若原始数据来自 $_POST['Acc'](非 JSON 字符串),应先确认其结构——若已是 PHP 数组(如 ['Charger', 'Headset']),则需先构造 ['value' => $val] 结构再映射;
- 推荐使用 array_map() 或 array_walk() 实现函数式写法,提升可读性与可维护性(进阶优化方向)。
通过该方法,你不仅能精准完成数据合并,还能为后续 API 响应、数据库插入或前端渲染提供标准化、可扩展的数据结构。



















