实现一维数组按竖线前缀分组并拼接同组后缀
合并相同前缀的竖线分隔数组元素
嘿,这个需求很常见!咱们可以用PHP轻松实现,核心思路就是先分组再拼接,具体看下面的步骤:
先明确需求
原始输入数组(PHP格式):
$originalArray = [ '1|1', '1|2', '1|3', '1|4', '1|5', '1|6', '1|32', '1|35', '2|1', '2|5', '3|1', '3|8', '3|11', '3|13', '3|35' ];
期望输出的合并后数组:
[ '1|1,2,3,4,5,6,32,35', '2|1,5', '3|1,8,11,13,35' ];
实现代码
// 初始化临时数组,用来按前缀分组存放后缀 $merged = []; foreach ($originalArray as $item) { // 拆分每个元素为前缀和后缀 list($prefix, $suffix) = explode('|', $item); // 如果前缀还没在临时数组里,先初始化一个空数组 if (!isset($merged[$prefix])) { $merged[$prefix] = []; } // 将后缀添加到对应前缀的数组中 $merged[$prefix][] = $suffix; } // 把分组后的数组转换成期望的格式 $result = []; foreach ($merged as $prefix => $suffixes) { // 把后缀数组用逗号拼接,再和前缀用竖线连接 $result[] = $prefix . '|' . implode(',', $suffixes); } // 输出结果 print_r($result);
代码解释
- 分组阶段:遍历原始数组,把每个元素拆分成前缀和后缀,用前缀作为临时数组的键,把所有同前缀的后缀收集到对应的数组里,完成按前缀的分组。
- 拼接阶段:遍历分组后的临时数组,把每个前缀和用逗号拼接后的后缀串起来,形成最终的元素格式,存入结果数组。
额外补充
如果你的原始数组里可能存在重复的后缀(比如出现两次1|2),想要去重的话,可以在添加后缀的时候做个判断:
if (!in_array($suffix, $merged[$prefix])) { $merged[$prefix][] = $suffix; }
或者直接用前缀数组的键来存后缀(自动去重):
$merged[$prefix][$suffix] = $suffix; // 拼接的时候要注意取数组的值:implode(',', array_values($merged[$prefix]))
内容的提问来源于stack exchange,提问作者4532066
相关产品推荐
相关产品推荐

