PHP如何对数组内的相邻匹配元素对进行合并分组
原代码问题分析
- 逻辑和需求完全不匹配:你当前代码的核心逻辑是判断当前元素与下一个元素是否相等,相等则跳过不加入结果,本质是实现连续重复元素的去重,和你需要的「相邻a、b匹配对合并」需求没有关联。
- 边界判断逻辑错误:代码中
$test[$i + 1 !== count($test) ? $i + 1 : 0]的写法,会在遍历到最后一个元素时,将当前元素和数组第一个元素对比,完全不符合相邻元素判断的规则。
修正方案
你需要新增一个临时变量缓存待匹配的前一个元素,遍历过程中判断是否符合「前一个是b、当前是a」的合并规则,符合则拼接后加入结果,不符合就将缓存的前一个元素先加入结果,再更新缓存为当前元素,遍历结束后记得把剩余的缓存元素加入结果。
修正后的代码如下:
$test = [ 'a', 'b', 'a', 'b', 'a', 'a', 'a' ]; $result = []; // 缓存待匹配的前一个元素 $prev = null; foreach ($test as $item) { // 符合相邻b和a的合并规则 if ($prev === 'b' && $item === 'a') { $result[] = $prev . $item; // 合并完成重置缓存 $prev = null; } else { // 前一个有值且不符合合并规则,先加入结果 if ($prev !== null) { $result[] = $prev; } // 更新缓存为当前元素 $prev = $item; } } // 遍历结束后处理剩余的缓存元素 if ($prev !== null) { $result[] = $prev; } dd($result);
运行上述代码得到的输出就是你需要的['a', 'ba', 'ba', 'a', 'a']。
内容的提问来源于stack exchange,提问作者x-ray
相关产品推荐
相关产品推荐

