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

PHP如何优雅统计多维数组中指定键的出现次数

问题描述

现有如下PHP业务代码,用于统计题目总数和已作答题目数量:

$arr = array(
    0 => array(
        'question' => 'Question 1',
        'choices' => array(
            0 => 'Choice 1',
            1 => 'Choice 2',
            2 => 'Choice 3',
        ),
        'valid' => 'Valid',
        'answer' => 'Answer',
    ),
    1 => array(
        'question' => 'Question 2',
        'choices' => array(
            0 => 'Choice 1',
            1 => 'Choice 2',
            2 => 'Choice 3',
        ),
        'valid' => 'Valid',
    ),
    2 => array(
        'question' => 'Question 3',
        'choices' => array(
            0 => 'Choice 1',
            1 => 'Choice 2',
            2 => 'Choice 3',
        ),
        'valid' => 'Valid',
        'answer' => 'Answer',
    ),
    3 => array(
        'question' => 'Question 4',
        'choices' => array(
            0 => 'Choice 1',
            1 => 'Choice 2',
            2 => 'Choice 3',
        ),
        'valid' => 'Valid',
    ),
);

$answered = 0;
foreach ($arr as $q) {
    if (isset($q['answer'])) {
        $answered++;
    }
}

echo 'Questions: ' . count($arr) . '<br>' . 'Answered questions: ' . $answered;

代码运行后输出结果:

Questions: 4
Answered questions: 2

当前实现通过foreach循环遍历+isset判断的方式统计已作答题目数量,本质是统计二维数组中键名answer的出现次数,完全可以通过PHP内置函数实现更简洁优雅的写法,不需要手动写循环计数逻辑。

可选实现方案
  • 最简写法:array_column + count
    这是最简洁、语义最清晰的实现方式,array_column原生支持提取多维数组中指定键的所有值,会自动过滤掉不存在目标键的子项,直接统计返回结果的长度即可得到已作答数量:
$answered = count(array_column($arr, 'answer'));

这种写法没有手动循环、没有临时计数变量,一行代码就能完成需求,可读性极强,适合仅判断键是否存在的简单统计场景。

  • 灵活扩展写法:array_reduce
    如果后续需要附加额外判断规则(比如答案不能为空、答案符合格式要求才算有效作答),可以用array_reduce实现函数式的计数,没有外部变量副作用,逻辑内聚:
$answered = array_reduce($arr, function($count, $question) {
    // 可在此处扩展更多判断逻辑,比如!empty($question['answer'])
    return $count + (isset($question['answer']) ? 1 : 0);
}, 0);
  • 箭头函数写法(PHP 7.4+)
    PHP 7.4版本支持箭头函数后,可以用array_filter配合箭头函数实现更简洁的条件过滤,再统计结果数量:
$answered = count(array_filter($arr, fn($q) => isset($q['answer'])));
方案选择建议
  • 无额外判断逻辑、仅统计指定键存在的数量时,优先选array_column方案,代码最短、性能也最优
  • 需要附加作答有效性判断时,选array_reduce或array_filter方案,扩展逻辑更方便

内容的提问来源于stack exchange,提问作者Faye D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:21:26