
本文讲解如何将一个包含 value 字段的 JSON 数组(如表单提交的配件名称列表),与一个预定义的 ID 映射关联数组进行匹配,动态为每个对象注入对应的 id 字段,并输出结构完整的 JSON 字符串。
本文讲解如何将一个包含 `value` 字段的 json 数组(如表单提交的配件名称列表),与一个预定义的 id 映射关联数组进行匹配,动态为每个对象注入对应的 `id` 字段,并输出结构完整的 json 字符串。
在 PHP 开发中,常需将前端传来的简单数据(如字符串数组或 JSON 格式的对象列表)与后端维护的业务字典(如配件名 → ID 映射表)进行关联处理。本例中,原始数据是一个 JSON 字符串,表示若干配件名称;而 $accessoriesID 是一个以配件名为键、唯一 ID 为值的关联数组。目标是为 JSON 数组中每个对象新增 "id" 字段,其值由 $accessoriesID 查找得出。
实现的关键步骤如下:
- 解析原始 JSON 字符串为 PHP 关联数组:使用 json_decode($json, true) 转为可遍历的索引数组;
- 遍历并匹配注入字段:对每个子数组(即 { "value": "xxx" }),提取 'value' 值作为键,在 $accessoriesID 中查找对应 ID;
- 安全写入新键值对:仅当 ID 存在时才添加 'id' => $id,避免未定义键导致逻辑错误;
- 重新编码为 JSON 输出:使用 json_encode() 得到最终期望格式的字符串。
以下是完整、健壮的实现代码:
// 原始 JSON 字符串(模拟 $_POST['Acc'] 经 json_encode 后的输入)
$rawJson = '[{"value":"Charger"},{"value":"Bag Only"},{"value":"Data Privacy Filter"},{"value":"Headset"}]';
$arrAccessories = json_decode($rawJson, 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 ($arrAccessories as &$item) {
$value = $item['value'] ?? null;
if ($value !== null && isset($accessoriesID[$value])) {
$item['id'] = $accessoriesID[$value];
}
}
unset($item); // 解除引用,防止意外修改
// 输出结果(注意:json_encode 默认不转义中文/特殊字符,如需兼容性可加 JSON_UNESCAPED_UNICODE)
echo json_encode($arrAccessories, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
// 输出示例:
// [{"value":"Charger","id":"11043"},{"value":"Bag Only","id":"11046"},{"value":"Data Privacy Filter","id":"11048"},{"value":"Headset","id":"11050"}]
✅ 注意事项:
- 若原始数据来自 $_POST['Acc'](如 HTML 多选框),请确保它已是数组形式(而非 JSON 字符串)。此时无需 json_decode,可直接遍历 $_POST['Acc'] 并构建对象;
- 使用 &$item 引用赋值可避免重复索引操作,提高可读性与性能;
- 始终检查 $item['value'] 是否存在(用 ?? null 或 isset()),防止因数据异常触发 Notice;
- json_encode() 返回的是字符串,如需用于 API 响应,请设置 header('Content-Type: application/json')。
通过该方法,你不仅能精准完成字段合并,还能轻松扩展逻辑(例如添加缺失项告警、默认 ID 回退、大小写归一化等),为构建健壮的数据处理层打下基础。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











