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

PHP中按序列统计数组连续重复元素(含非连续重复项)

解决数组连续重复元素的分段统计问题

嘿,我明白你想要的是分段统计连续重复的元素,而array_count_values只能给出每个元素的总出现次数,完全没法区分连续的段落对吧?没问题,我们可以通过遍历数组手动实现这个需求,代码其实很直观:

$array = ['a', 'b', 'a', 'a', 'a', 'c', 'c', 'b', 'b', 'a', 'a', 'a', 'a'];
$result = [];

// 先判断数组非空,避免空数组报错
if (!empty($array)) {
    $currentElement = $array[0];
    $count = 1;

    // 从第二个元素开始遍历
    for ($i = 1; $i < count($array); $i++) {
        if ($array[$i] === $currentElement) {
            // 和当前元素相同,计数加1
            $count++;
        } else {
            // 遇到不同元素,把当前段的统计存入结果
            $result[] = [
                'element' => $currentElement,
                'counted_value' => $count
            ];
            // 更新当前元素为新元素,重置计数
            $currentElement = $array[$i];
            $count = 1;
        }
    }
    // 别忘了添加最后一段的统计(循环结束后最后一段还没存)
    $result[] = [
        'element' => $currentElement,
        'counted_value' => $count
    ];
}

// 输出成你期望的格式
echo "element counted value\n";
foreach ($result as $item) {
    echo "{$item['element']} {$item['counted_value']}\n";
}

代码逻辑解释

  • 先初始化currentElement为数组第一个元素,计数器count设为1;
  • 从第二个元素开始遍历数组:
    • 如果当前元素和currentElement相同,就把计数器加1;
    • 如果遇到不同元素,就把当前段的元素和计数存入结果数组,然后更新currentElement为新元素,计数器重置为1;
  • 遍历结束后必须额外添加最后一段的统计——因为循环里只有遇到不同元素时才会存数据,最后一段不会触发这个逻辑,所以要手动补上。

运行输出

element counted value
a 1
b 1
a 3
c 2
b 2
a 4

如果需要把结果转换成其他格式(比如关联数组列表、JSON等),只需要调整$result的存储方式或者输出逻辑就可以啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:57:02