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

PHP数组按双列分组统计频次并格式化输出优化问询

PHP数组按双列分组统计并指定格式输出

需求说明

对给定PHP数组的元素按「标识+数值」两个列值分组,统计每组出现次数,并以「标识 数值x次数」的格式输出。

输入数组

$array = [
    ['FA',12.9],
    ['FA',12.9],
    ['FB',12.2],
    ['FC',12.3],
    ['FA',12.9],
    ['FB',12.9],
    ['FA',12.4],
];

期望输出

FA 12.9x3
FB 12.2x1
FC 12.3x1
FB 12.9x1
FA 12.4x1

当前代码

$new = [];
foreach ($array as $key=> $value) {
    if (!array_key_exists($value[0],$new)) {
        $new[$value[0]]=[strval($value[1])=>1];
    }
    else {
        if (!array_key_exists(strval($value[1]),$new[$value[0]])) {
           $new[$value[0]][strval($value[1])]=1;
           //    $no+=1;
        }
        else {
            $count= $new[$value[0]];
            $count=$count[strval($value[1])];
            $count+=1;
            $new[$value[0]][strval($value[1])]=$count;
        }
    }
}

优化方案与格式输出实现

你的统计逻辑可行,但嵌套判断过于繁琐,以下是简化后的统计代码,同时实现指定格式输出:

方案1:使用复合键统计(更简洁)

$counts = [];
// 分组统计次数
foreach ($array as $item) {
    // 用分隔符拼接标识和数值作为唯一键,避免组合冲突
    $uniqueKey = $item[0] . '|' . $item[1];
    $counts[$uniqueKey] = isset($counts[$uniqueKey]) ? $counts[$uniqueKey] + 1 : 1;
}

// 按指定格式输出
foreach ($counts as $key => $num) {
    list($flag, $value) = explode('|', $key);
    echo "$flag $value" . "x$num\n";
}

方案2:保持嵌套数组结构(兼容原逻辑)

$counts = [];
// 分组统计次数
foreach ($array as $item) {
    $flag = $item[0];
    $value = $item[1];
    // 简化判断,直接初始化计数再累加
    if (!isset($counts[$flag][$value])) {
        $counts[$flag][$value] = 0;
    }
    $counts[$flag][$value]++;
}

// 按指定格式输出
foreach ($counts as $flag => $valueCounts) {
    foreach ($valueCounts as $value => $num) {
        echo "$flag $value" . "x$num\n";
    }
}

两种方案都能得到符合要求的输出,方案1代码更简洁,方案2保留了标识分组的层级结构,可根据需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:45:34