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

如何提取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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:57:41