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
相关产品推荐
相关产品推荐

