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

PHP如何按分隔键值对将多维数组拆分为多个子数组?

PHP多维数组按separator拆分解决方案

实现思路

遍历原数组,每当遇到type为separator的元素时,创建新的子数组并将该元素加入;后续非separator元素全部归入当前子数组,直到下一个separator出现,重复此流程完成拆分。

完整代码实现

<?php
$test = [
    0 => [
        'type' => 'separator',
        'data' => 'separator1'
    ],
    1 => [
        'type' => 'image',
        'data' => 'image1url'
    ],
    3 => [
        'type' => 'separator',
        'data' => 'separator2'
    ],
    4 => [
        'type' => 'video',
        'data' => 'video1url'
    ],
    5 => [
        'type' => 'image',
        'data' => 'image3url'
    ],
];

$result = [];
$currentGroup = null;

foreach ($test as $item) {
    // 遇到separator时,开启新分组
    if ($item['type'] === 'separator') {
        // 若当前存在未保存的分组,先存入结果集
        if ($currentGroup !== null) {
            $result[] = $currentGroup;
        }
        // 初始化新分组并加入当前separator元素
        $currentGroup = [$item];
    } else {
        // 非separator元素直接加入当前分组
        if ($currentGroup !== null) {
            $currentGroup[] = $item;
        }
    }
}

// 遍历结束后,将最后一个分组存入结果集
if ($currentGroup !== null) {
    $result[] = $currentGroup;
}

// 查看拆分结果,$result[0]对应示例中的$array1,$result[1]对应$array2
print_r($result);
?>

代码说明

  • $result用于存储最终拆分后的所有子数组,$currentGroup临时保存正在构建的子数组。
  • 遍历过程中,通过判断元素类型切换分组:
    • 遇到separator时,先保存上一个已构建的分组(如果存在),再初始化新分组。
    • 非separator元素直接追加到当前分组(需确保分组已初始化,避免原数组开头非separator的异常情况)。
  • 遍历结束后必须手动保存最后一个分组,防止遗漏未处理的内容。

输出结果

执行代码后,$result的结构与需求示例完全匹配:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [type] => separator
                    [data] => separator1
                )

            [1] => Array
                (
                    [type] => image
                    [data] => image1url
                )

        )

    [1] => Array
        (
            [0] => Array
                (
                    [type] => separator
                    [data] => separator2
                )

            [1] => Array
                (
                    [type] => video
                    [data] => video1url
                )

            [2] => Array
                (
                    [type] => image
                    [data] => image3url
                )

        )

)

内容的提问来源于stack exchange,提问作者Mohammad Afzali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:41:28