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

PHP动态多维数组值计数实现问题求助

解决多维数组按层级统计值出现次数的问题

我来帮你修正代码,实现你想要的计数效果。首先我们先理清需求:你需要按原数组第二层的键(1和2),分别统计对应所有子数组中每个字符串的总出现次数。

问题分析

你之前的代码里,每次循环都用array_count_values($gMValue2)覆盖了$allGridCount[$gMKey2],而且后续的循环逻辑没有正确累加之前的计数,导致最终只保留了最后一次循环的子数组计数,这就是结果不符合预期的核心原因。

修正后的代码

// 你的原始多维数组
$allMultiGridRes = [
    0 => [
        1 => ['grid multi col1', 'grid multi col2'],
        2 => ['grid multi col1']
    ],
    1 => [
        1 => ['grid multi col1', 'grid multi col2'],
        2 => ['grid multi col1', 'grid multi col2']
    ],
    2 => [
        1 => ['grid multi col1', 'grid multi col2'],
        2 => ['grid multi col1', 'grid multi col2']
    ]
];

$allGridCount = [];

foreach ($allMultiGridRes as $GMvalue) {
    if (empty($GMvalue)) continue;
    
    foreach ($GMvalue as $gMKey2 => $gMValue2) {
        if (empty($gMValue2)) continue;
        
        // 初始化当前层级的计数数组(如果不存在)
        if (!isset($allGridCount[$gMKey2])) {
            $allGridCount[$gMKey2] = [];
        }
        
        // 遍历子数组值,累加计数
        foreach ($gMValue2 as $value) {
            $allGridCount[$gMKey2][$value] = isset($allGridCount[$gMKey2][$value]) 
                ? $allGridCount[$gMKey2][$value] + 1 
                : 1;
        }
    }
}

print_r($allGridCount);

代码逻辑说明

  1. 初始化结果容器:$allGridCount用来存储最终的分层统计结果,初始为空数组。
  2. 第一层遍历:循环原数组的顶层元素,跳过空元素避免报错。
  3. 第二层遍历:针对每个顶层元素,循环它的子数组($gMKey2就是你要统计的层级键:1或2)。
  4. 层级计数初始化:如果当前层级还没有对应的计数数组,先创建一个空数组。
  5. 累加计数:遍历当前子数组的每个值,检查它是否已在对应层级的计数数组中:
    • 存在则计数+1,不存在则初始化为1。

运行这段代码后,你会得到完全符合预期的输出:

Array ( 
    [1] => Array ( 
        [grid multi col1] => 3 
        [grid multi col2] => 3 
    ),
    [2] => Array ( 
        [grid multi col1] => 3 
        [grid multi col2] => 2 
    ) 
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:59:40