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

如何按规则合并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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:03:08