如何检查多维数组中键是否以'1.1.'开头并统计对应数值?
解决多维数组中统计键以'1.1.'开头的数值总和问题
嘿,看来你卡在多维数组的遍历统计上了!别担心,咱们用递归遍历的方法就能搞定——毕竟多维数组的嵌套层级不固定,递归是最靠谱的方式。
核心思路
因为数组是多层嵌套的,咱们需要写一个递归函数,它会:
- 遍历当前层级的每个元素
- 如果遇到子数组,就自己调用自己深入进去
- 每次检查元素的键是否以
'1.1.'开头,是的话就把对应的数值加到总和里
完整代码示例
function count11PrefixedValues($array) { $total = 0; foreach ($array as $key => $value) { // 如果是子数组,递归遍历 if (is_array($value)) { $total += count11PrefixedValues($value); } else { // 检查键是否以'1.1.'开头 // PHP 8+ 可以用 str_starts_with if (str_starts_with($key, '1.1.')) { $total += $value; } // 如果你用的是PHP 7.x及以下,替换成下面这行: // if (substr($key, 0, 4) === '1.1.') { // $total += $value; // } } } return $total; } // 你的多维数组示例 $teamMembers = [ 0 => [ '1.1.leader' => 5, '1.2.member' => 3, 'sub_group' => [ '1.1.co_leader' => 2, '2.1.trainee' => 1 ] ], 1 => [ '1.1.senior' => 4, 'other' => [ 'deep_sub' => [ '1.1.junior' => 1 ] ] ] ]; // 调用函数并输出结果 echo count11PrefixedValues($teamMembers); // 输出:12
代码解释
- 递归遍历:不管数组嵌套多少层,函数都会自动深入到最底层,不会漏掉任何一个元素
- 键判断:
str_starts_with(PHP8+)直接判断键的前缀;如果是低版本PHP,用substr截取前4个字符对比,因为'1.1.'刚好是4个字符 - 累加逻辑:每找到一个符合条件的键,就把对应的数值加到总和里,最后返回总数值
为什么之前的方法失败?
大概率是你之前只遍历了数组的第一层(比如只循环了$teamMembers[0]、$teamMembers[1]),没有处理嵌套在里面的子数组,导致漏掉了深层的符合条件的项。递归就能完美解决这个问题~
内容的提问来源于stack exchange,提问作者Carlove
相关产品推荐
相关产品推荐

