如何按规则合并PHP数组?元素数为3的子数组需合并后续子数组
解决数组按规则合并的问题
嘿,刚好碰到过类似的需求,我来给你写个清晰的PHP实现方案,完全符合你要的规则!
需求回顾
我们需要把输入数组按以下规则合并:
- 当遇到元素个数为3的子数组时,把它作为"主数组"
- 后续所有元素个数不为3的子数组,都放到这个主数组的
additional字段里 - 直到遇到下一个元素个数为3的子数组,重复上述操作
实现代码
直接上可运行的PHP代码,注释已经写得很清楚了:
// 你的输入数组 $data = [ ['mango', 'orange', 'apple'], ['abc'], ['ctp'], ['pqr', 'cst', 'dtc'], ['cbx'], ['xyz'], ['atc'], ]; $result = []; $currentMainGroup = null; // 存储当前的"主数组"(元素数为3的子数组) $tempAdditional = []; // 临时存储要放到主数组additional里的子数组 foreach ($data as $subArray) { // 遇到元素数为3的子数组,处理之前的主数组(如果有的话) if (count($subArray) === 3) { if ($currentMainGroup !== null) { // 把临时收集的additional加到主数组里,然后放入结果 $currentMainGroup['additional'] = $tempAdditional; $result[] = $currentMainGroup; // 重置临时additional数组 $tempAdditional = []; } // 更新当前主数组为新的3元素子数组 $currentMainGroup = $subArray; } else { // 非3元素子数组,先临时存起来 $tempAdditional[] = $subArray; } } // 处理最后一个主数组(循环结束后可能还有未加入结果的) if ($currentMainGroup !== null) { $currentMainGroup['additional'] = $tempAdditional; $result[] = $currentMainGroup; } // 打印结果看看 print_r($result);
运行结果
执行这段代码后,输出的$result就是你期望的结构:
Array ( [0] => Array ( [0] => mango [1] => orange [2] => apple [additional] => Array ( [0] => Array ( [0] => abc ) [1] => Array ( [0] => ctp ) ) ) [1] => Array ( [0] => pqr [1] => cst [2] => dtc [additional] => Array ( [0] => Array ( [0] => cbx ) [1] => Array ( [0] => xyz ) [2] => Array ( [0] => atc ) ) ) )
这个方案逻辑很清晰,不管你的输入数组有多少个3元素子数组,都能正确处理,包括最后一组的收尾工作。
内容的提问来源于stack exchange,提问作者Suraj
相关产品推荐
相关产品推荐

