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
相关产品推荐
相关产品推荐

