You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:12:52