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

PHP中遍历数组统计元素的方法?现有代码计数异常求助

PHP数组按供应商+品牌统计数量的问题解决

问题描述

想要在PHP中遍历数组,按provider->name和product->brand->name分组统计元素数量,尝试了以下代码:

foreach ($items as $item) {
    $tm[$item->provider->name] = [];
    foreach ($items as $item) {
        $tm[$item->provider->name][$item->product->brand->name] = isset($tm[$item->provider->name][$item->product->brand->name]) ? $tm[$item->provider->name][$item->product->brand->name] + 1 : $tm[$item->provider->name][$item->product->brand->name] = 1;
    }
}

但得到错误结果,计数数值极高,像是被重复遍历了多次。

数组结构示例:

[{
    "id": 1,
    "product": {
        "id": 1,
        "brand": {
            "id": 1,
            "name": "iphone"
        }
    },
    "provider": {
        "id": 1,
        "name": "at&t"
    }
},
{
    "id": 2,
    "product": {
        "id": 2,
        "brand": {
            "id": 2,
            "name": "iphone"
        }
    },
    "provider": {
        "id": 1,
        "name": "at&t"
    }
},
{
    "id": 3,
    "product": {
        "id": 3,
        "brand": {
            "id": 3,
            "name": "iphone"
        }
    },
    "provider": {
        "id": 1,
        "name": "t-mobile"
    }
}]

错误原因

你的代码嵌套了两层遍历同一个$items数组的循环:

  • 外层循环每遍历一个元素,就会把$tm[$item->provider->name]重置为空数组
  • 接着内层循环会完整遍历所有元素一次,对每个供应商的品牌计数进行累加
  • 假设$items有N个元素,每个元素会被重复统计N次,最终计数就是实际数量的N倍,所以数值异常高

正确代码

只需要一层循环即可完成统计,避免重复遍历:

$tm = [];
foreach ($items as $item) {
    $providerName = $item->provider->name;
    $brandName = $item->product->brand->name;
    
    // 初始化供应商分组(如果不存在)
    if (!isset($tm[$providerName])) {
        $tm[$providerName] = [];
    }
    
    // 统计品牌数量
    if (isset($tm[$providerName][$brandName])) {
        $tm[$providerName][$brandName]++;
    } else {
        $tm[$providerName][$brandName] = 1;
    }
}

代码说明

  1. 先初始化空数组$tm用于存储统计结果
  2. 遍历每个元素时,先提取当前元素的供应商名和品牌名,提升代码可读性
  3. 检查供应商分组是否存在,不存在则创建空数组
  4. 对应品牌的计数:存在则加1,不存在则设为1
  5. 最终$tm会得到按供应商分组,每个供应商下各品牌的正确统计数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:25:30