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

PHP多维数组按code字段分组并汇总product_quantity字段

PHP数组按code分组并汇总product_quantity字段值

我们需要处理一个嵌套的PHP数组,针对每个区域内的产品数据,按照code字段进行分组,并将每组内的product_quantity值求和汇总,最终得到每个区域下各code对应总数量的数组。

原数组

$zone = array (
  0 => 
  array (
    'Bertoua Zone 3' => 
    array (
      0 => 
      array (
        'code' => 'BFT50C',
        'product_quantity' => '4',
        'zone_name' => 'Bertoua Zone 3',
      ),
      1 => 
      array (
        'code' => 'MNY65C',
        'product_quantity' => '10',
        'zone_name' => 'Bertoua Zone 3',
      ),
      2 => 
      array (
        'code' => 'JAP65C',
        'product_quantity' => '7',
        'zone_name' => 'Bertoua Zone 3',
      ),
      3 => 
      array (
        'code' => 'MNY65C',
        'product_quantity' => '4',
        'zone_name' => 'Bertoua Zone 3',
      ),
      4 => 
      array (
        'code' => 'JAP65C',
        'product_quantity' => '3',
        'zone_name' => 'Bertoua Zone 3',
      ),
      5 => 
      array (
        'code' => 'BFT50C',
        'product_quantity' => '3',
        'zone_name' => 'Bertoua Zone 3',
      ),
      6 => 
      array (
        'code' => 'JAP65C',
        'product_quantity' => '2',
        'zone_name' => 'Bertoua Zone 3',
      ),
    ),
    'Bertoua Zone 1' => 
    array (
      0 => 
      array (
        'code' => 'MNY65C',
        'product_quantity' => '5',
        'zone_name' => 'Bertoua Zone 1',
      ),
      1 => 
      array (
        'code' => 'JAP65C',
        'product_quantity' => '3',
        'zone_name' => 'Bertoua Zone 1',
      ),
      2 => 
      array (
        'code' => 'BFT50C',
        'product_quantity' => '7',
        'zone_name' => 'Bertoua Zone 1',
      ),
      3 => 
      array (
        'code' => 'MNY65C',
        'product_quantity' => '15',
        'zone_name' => 'Bertoua Zone 1',
      ),
      4 => 
      array (
        'code' => 'JAP65C',
        'product_quantity' => '5',
        'zone_name' => 'Bertoua Zone 1',
      ),
      5 => 
      array (
        'code' => 'BFT50C',
        'product_quantity' => '4',
        'zone_name' => 'Bertoua Zone 1',
      ),
    ),
  ),
);

期望结果数组

$recapByZone = array (
  0 => 
  array (
    'Bertoua Zone 3' => 
    array (
      0 => 
      array (
        'code' => 'BFT50C',
        'product_quantity' => 7,
        'zone_name' => 'Bertoua Zone 3',
      ),
      1 => 
      array (
        'code' => 'MNY65C',
        'product_quantity' => 14,
        'zone_name' => 'Bertoua Zone 3',
      ),
      2 => 
      array (
        'code' => 'JAP65C',
        'product_quantity' => 12,
        'zone_name' => 'Bertoua Zone 3',
      ),
    ),
    'Bertoua Zone 1' => 
    array (
      0 => 
      array (
        'code' => 'MNY65C',
        'product_quantity' => 20,
        'zone_name' => 'Bertoua Zone 1',
      ),
      1 => 
      array (
        'code' => 'JAP65C',
        'product_quantity' => 8,
        'zone_name' => 'Bertoua Zone 1',
      ),
      2 => 
      array (
        'code' => 'BFT50C',
        'product_quantity' => 11,
        'zone_name' => 'Bertoua Zone 1',
      ),
    ),
  ),
);

实现代码

$recapByZone = [];

// 遍历外层的区域集合
foreach ($zone as $areaSet) {
    $processedArea = [];
    // 逐个处理每个区域
    foreach ($areaSet as $zoneName => $products) {
        $sumByCode = [];
        // 遍历区域内的所有产品
        foreach ($products as $product) {
            $code = $product['code'];
            // 将字符串类型的数量转为整数
            $quantity = (int)$product['product_quantity'];
            
            // 累加对应code的数量
            if (isset($sumByCode[$code])) {
                $sumByCode[$code]['product_quantity'] += $quantity;
            } else {
                $sumByCode[$code] = [
                    'code' => $code,
                    'product_quantity' => $quantity,
                    'zone_name' => $zoneName
                ];
            }
        }
        // 将关联数组转为索引数组,匹配期望格式
        $processedArea[$zoneName] = array_values($sumByCode);
    }
    $recapByZone[] = $processedArea;
}

// 打印结果
print_r($recapByZone);

代码逻辑说明

  1. 初始化结果数组用于存储最终处理后的数据;
  2. 逐层遍历原数组的嵌套结构,先处理外层的区域集合,再逐个处理每个区域;
  3. 对每个区域内的产品,以code为键创建临时数组,累加对应产品的数量(注意将字符串转为整数避免字符串拼接);
  4. 每个区域处理完成后,将临时的关联数组转为索引数组,保证格式与期望结果一致;
  5. 最终将处理好的区域数据存入结果数组。

内容的提问来源于stack exchange,提问作者Mickey101987

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 11:24:10