如何提取PHP数组中每个START元素之后的子数组?
解决方案:拆分包含"START"标记的PHP数组
问题描述
给定PHP数组:
$array = ["START","a","a","a","START","b","b","b","START","c","c","c"];
需要将每个START之后的元素提取为独立子数组,最终得到:
$arr[0] = ["a","a","a"]; $arr[1] = ["b","b","b"]; $arr[2] = ["c","c","c"];
方法一:通过标记索引切片
先定位所有START元素的位置,再根据相邻标记的区间截取子数组:
$array = ["START","a","a","a","START","b","b","b","START","c","c","c"]; // 获取所有"START"对应的键名 $startPositions = array_keys($array, "START"); $result = []; foreach ($startPositions as $i => $pos) { // 确定当前区间的结束位置:下一个START的位置,若无则取数组长度 $endPos = $startPositions[$i + 1] ?? count($array); // 截取当前START之后到下一个START之前的元素 $subArray = array_slice($array, $pos + 1, $endPos - $pos - 1); if (!empty($subArray)) { $result[] = $subArray; } } // 输出结果 print_r($result);
方法二:遍历动态收集子数组
直接遍历数组,遇到START时将当前收集的元素存入结果,否则继续收集:
$array = ["START","a","a","a","START","b","b","b","START","c","c","c"]; $result = []; $currentGroup = []; foreach ($array as $item) { if ($item === "START") { // 若已有收集的元素,先存入结果并清空当前组 if (!empty($currentGroup)) { $result[] = $currentGroup; $currentGroup = []; } } else { $currentGroup[] = $item; } } // 处理最后一组未存入的元素 if (!empty($currentGroup)) { $result[] = $currentGroup; } // 输出结果 print_r($result);
说明
单独使用array_slice无法直接完成需求,因为它需要明确的起始和长度参数,而我们需要先定位所有分隔标记START的位置,或者通过遍历动态划分区间。
内容的提问来源于stack exchange,提问作者ConDentures
相关产品推荐
相关产品推荐

