使用PHP统计JSON中id_piesa相关数据:次数、状态及数量求和
PHP实现嵌套JSON零件数据统计
我来帮你搞定这个统计需求!咱们的JSON是双层嵌套结构,所以第一步得把所有零件数据先扁平化,然后逐个统计每个id_piesa的出现次数、保修状态次数,还有数量总和。下面是完整的可运行代码:
<?php // 原始嵌套JSON数据 $jsonData = '[ [ {"id_piesa":"7", "cantitate_piesa":1, "garantie_piesa":false }, {"id_piesa":"18", "cantitate_piesa":1, "garantie_piesa":false }, {"id_piesa":"313", "cantitate_piesa":1, "garantie_piesa":false }, {"id_piesa":"312", "cantitate_piesa":1, "garantie_piesa":false } ], [ {"id_piesa":"68", "cantitate_piesa":1, "garantie_piesa":false }, {"id_piesa":"44", "cantitate_piesa":1, "garantie_piesa":false }, {"id_piesa":"168", "cantitate_piesa":1, "garantie_piesa":true }, {"id_piesa":"444", "cantitate_piesa":1, "garantie_piesa":false }, {"id_piesa":"91", "cantitate_piesa":1, "garantie_piesa":false } ], [ {"id_piesa":"168", "cantitate_piesa":1, "garantie_piesa":false }, {"id_piesa":"44", "cantitate_piesa":1, "garantie_piesa":false }, {"id_piesa":"308", "cantitate_piesa":1, "garantie_piesa":false }, {"id_piesa":"1", "cantitate_piesa":1, "garantie_piesa":false }, {"id_piesa":"27", "cantitate_piesa":1, "garantie_piesa":false }, {"id_piesa":"26", "cantitate_piesa":1, "garantie_piesa":false }, {"id_piesa":"65", "cantitate_piesa":1, "garantie_piesa":false }, {"id_piesa":"74", "cantitate_piesa":1, "garantie_piesa":true } ], [{"id_piesa":"82", "cantitate_piesa":1, "garantie_piesa":false }], [{"id_piesa":"120", "cantitate_piesa":1, "garantie_piesa":false }], [{"id_piesa":"120", "cantitate_piesa":1, "garantie_piesa":true }], [{"id_piesa":"71", "cantitate_piesa":1, "garantie_piesa":false }], [ {"id_piesa":"168", "cantitate_piesa":1, "garantie_piesa":false }, {"id_piesa":"44", "cantitate_piesa":1, "garantie_piesa":false }, {"id_piesa":"91", "cantitate_piesa":1, "garantie_piesa":false }, {"id_piesa":"444", "cantitate_piesa":1, "garantie_piesa":false } ] ]'; // 将JSON解析为PHP数组 $partsData = json_decode($jsonData, true); // 初始化统计结果数组 $stats = []; // 遍历外层的每个子数组 foreach ($partsData as $group) { // 遍历子数组中的每个零件项 foreach ($group as $part) { $id = $part['id_piesa']; $quantity = $part['cantitate_piesa']; $hasWarranty = $part['garantie_piesa']; // 如果该零件ID尚未在统计数组中,初始化统计项 if (!isset($stats[$id])) { $stats[$id] = [ 'total_count' => 0, 'warranty_true' => 0, 'warranty_false' => 0, 'total_quantity' => 0 ]; } // 更新统计数据 $stats[$id]['total_count']++; $stats[$id]['total_quantity'] += $quantity; if ($hasWarranty) { $stats[$id]['warranty_true']++; } else { $stats[$id]['warranty_false']++; } } } // 格式化输出统计结果 echo "统计结果:\n"; foreach ($stats as $id => $data) { echo "id_piesa {$id}: 出现{$data['total_count']}次,cantitate_piesa总和为{$data['total_quantity']},"; echo "garantie_piesa为true的次数是{$data['warranty_true']}次,为false的次数是{$data['warranty_false']}次\n"; } ?>
代码说明:
- 首先用
json_decode()把JSON字符串转成PHP关联数组,方便遍历操作 - 用
$stats数组存储每个零件ID的统计数据,键是id_piesa,值包含四个统计字段:total_count:该零件的出现次数warranty_true:保修为true的次数warranty_false:保修为false的次数total_quantity:数量总和
- 通过双层循环遍历所有零件项,逐个更新统计数据
- 最后遍历统计结果数组,以清晰的格式输出每个零件的统计信息
部分输出示例:
统计结果: id_piesa 7: 出现1次,cantitate_piesa总和为1,garantie_piesa为true的次数是0次,为false的次数是1次 id_piesa 168: 出现3次,cantitate_piesa总和为3,garantie_piesa为true的次数是1次,为false的次数是2次 id_piesa 120: 出现2次,cantitate_piesa总和为2,garantie_piesa为true的次数是1次,为false的次数是1次
内容的提问来源于stack exchange,提问作者florinstefan8830
相关产品推荐
相关产品推荐

