
本文详解如何在 php 中正确解析 json 格式数据为关联数组,并通过 foreach 遍历提取满足条件(如 status == 2)的 swift_code 和 note 字段,构造结构清晰的目标数组,同时处理缺失字段的容错逻辑。
本文详解如何在 php 中正确解析 json 格式数据为关联数组,并通过 foreach 遍历提取满足条件(如 status == 2)的 swift_code 和 note 字段,构造结构清晰的目标数组,同时处理缺失字段的容错逻辑。
在 PHP 开发中,常需从 JSON 数据或嵌套关联数组中按条件筛选并重组数据。上述需求的核心在于:将顶层键(如 "40E"、"43P")对应的子数组中 status 为 2 的条目,提取其 swift_code 和 note(若不存在则设为空字符串),最终生成标准化的二维索引数组。
首先需注意:原始数据是 JSON 格式(非原生 PHP 数组),必须使用 json_decode($json, true) 转换为关联数组(第二个参数 true 确保返回数组而非 stdClass 对象)。否则直接遍历时会因类型不匹配导致错误。
以下是完整可运行的实现代码:
<?php // 1. 将 JSON 字符串安全解码为关联数组
$json = '{
"40E": {
"id": 94,
"swift_code": "40E",
"status": 1
},
"43P": {
"id": 106,
"swift_code": "43P",
"status": 2,
"note": "Allowed (INSTEAD OF EXISTING)"
},
"27": {
"id": 106,
"swift_code": "27",
"status": 2,
"note": "Allowed"
}
}';
$businesscommercialArray = json_decode($json, true);
// 2. 初始化目标数组
$finalArray = [];
// 3. 遍历每个业务项(键为 swift_code,值为完整数据)
foreach ($businesscommercialArray as $swiftCode => $item) {
// 仅当 status == 2 时才纳入结果(根据题意逻辑)
if (isset($item['status']) && $item['status'] === 2) {
$finalArray[] = [
'swift_code' => $item['swift_code'] ?? $swiftCode, // 兜底使用键名
'note' => $item['note'] ?? '' // 容错:note 不存在则为空字符串
];
}
}
// 4. 输出验证结果
print_r($finalArray);
?>
输出结果:
Array
(
[0] => Array
(
[swift_code] => 43P
[note] => Allowed (INSTEAD OF EXISTING)
)
[1] => Array
(
[swift_code] => 27
[note] => Allowed
)
)
✅ 关键要点说明:
-
避免重复遍历:原始代码中嵌套了两层
foreach,但$businesscommercialArray是一维关联数组(键 → 子数组),无需内层循环;直接访问$item['swift_code']和$item['note']即可。 -
安全访问字段:使用空合并运算符
??处理note可能缺失的情况,比isset()+ 三元更简洁;对status则显式用isset()和严格比较=== 2,防止字符串'2'或整数2类型混淆。 -
键名即业务标识:顶层键(如
"40E")本身即swift_code,因此即使子数组中未显式定义该字段,也可作为兜底值(本例中已存在,属冗余保护)。 - 性能与可读性:单层遍历 + 条件过滤,逻辑直白,时间复杂度 O(n),适合千级以内数据量。
如需扩展支持更多状态或动态字段映射,可进一步封装为函数并传入回调条件,提升复用性。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











