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);
代码逻辑说明
- 初始化结果容器:
$allGridCount用来存储最终的分层统计结果,初始为空数组。 - 第一层遍历:循环原数组的顶层元素,跳过空元素避免报错。
- 第二层遍历:针对每个顶层元素,循环它的子数组(
$gMKey2就是你要统计的层级键:1或2)。 - 层级计数初始化:如果当前层级还没有对应的计数数组,先创建一个空数组。
- 累加计数:遍历当前子数组的每个值,检查它是否已在对应层级的计数数组中:
- 存在则计数+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
相关产品推荐
相关产品推荐

