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

如何将含STOPSALES的扁平日期数组分组为子数组?

按STOPSALES分组日期数组的实现方法

我有一个包含日期字符串和"STOPSALES"字符串的扁平数组,想要生成一个仅包含日期值的新数组,每遇到"STOPSALES"时就创建新的子数组分组。

原数组

[0]=>
  string(10) "2023-03-10"
[1]=>
  string(10) "2023-03-11"
[2]=>
  string(10) "2023-03-12"
[3]=>
  string(10) "2023-03-13"
[4]=>
  string(10) "2023-03-14"
[5]=>
  string(10) "2023-03-15"
[6]=>
  string(9) "STOPSALES"
[7]=>
  string(9) "STOPSALES"
[8]=>
  string(9) "STOPSALES"
[9]=>
  string(9) "STOPSALES"
[10]=>
  string(9) "STOPSALES"
[11]=>
  string(9) "STOPSALES"
[12]=>
  string(9) "STOPSALES"
[13]=>
  string(9) "STOPSALES"
[14]=>
  string(9) "STOPSALES"
[15]=>
  string(9) "STOPSALES"
[16]=>
  string(9) "STOPSALES"
[17]=>
  string(10) "2023-03-27"
[18]=>
  string(10) "2023-03-28"
[19]=>
  string(10) "2023-03-29"
[20]=>
  string(10) "2023-03-30"
[21]=>
  string(10) "2023-03-31"
[22]=>
  string(10) "2023-04-01"
[23]=>
  string(10) "2023-04-02"
[24]=>
  string(10) "2023-04-03"

期望结果

[0]=>
  array(6) {
    [0]=>
    string(10) "2023-03-10"
    [1]=>
    string(10) "2023-03-11"
    [2]=>
    string(10) "2023-03-12"
    [3]=>
    string(10) "2023-03-13"
    [4]=>
    string(10) "2023-03-14"
    [5]=>
    string(10) "2023-03-15"
  }
[1]=>
  array(8) {
    [0]=>
    string(10) "2023-03-27"
    [1]=>
    string(10) "2023-03-28"
    [2]=>
    string(10) "2023-03-29"
    [3]=>
    string(10) "2023-03-30"
    [4]=>
    string(10) "2023-03-31"
    [5]=>
    string(10) "2023-04-01"
    [6]=>
    string(10) "2023-04-02"
    [7]=>
    string(10) "2023-04-03"
  }

我尝试的代码

$res = [];
$num = 0;
foreach ($array as $go) {
    if ($go == 'STOPSALES') {
        continue; 
    } else {
        $num = $num+1;
         array_push($res[$num],$go);
    }
}
var_export($result);

正确实现方法

你的代码存在两个核心问题:

  1. 未初始化$res[$num]就调用array_push,会触发PHP警告
  2. 每次遇到日期就递增$num,导致分组索引混乱,且连续的STOPSALES无法触发新分组创建

以下是正确的实现代码:

$res = [];
$currentGroup = [];

foreach ($array as $item) {
    if ($item === 'STOPSALES') {
        // 仅当当前分组有内容时才加入结果,避免连续STOPSALES产生空数组
        if (!empty($currentGroup)) {
            $res[] = $currentGroup;
            $currentGroup = [];
        }
    } else {
        // 将日期追加到当前分组
        $currentGroup[] = $item;
    }
}

// 循环结束后,处理最后一组未被加入的日期(避免因无后续STOPSALES而遗漏)
if (!empty($currentGroup)) {
    $res[] = $currentGroup;
}

var_export($res);

逻辑说明

  • 用$currentGroup临时存储当前分组的日期
  • 遍历数组时,遇到STOPSALES就检查当前分组是否有内容,有则加入结果并重置分组
  • 遇到日期直接添加到当前分组
  • 循环结束后必须检查一次$currentGroup,确保最后一组日期被正常加入结果

内容的提问来源于stack exchange,提问作者Derek Robins

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:05:18