【问题标题】:split up an array of dates into consecutive date arrays将日期数组拆分为连续的日期数组
【发布时间】:2013-08-14 22:31:26
【问题描述】:

我有一个日期数组,看起来像这样:

Array (
  [0] => 08/20/2013
  [1] => 08/21/2013
  [2] => 08/22/2013
  [3] => 08/23/2013
  [4] => 08/26/2013
)

它总是会根据用户选择的日期而有所不同,但例如让我们使用这个。

我需要做的是想办法将数组分成连续日期和非连续日期。

所以最后我应该有类似的东西:

Array (
  [0] => 08/20/2013
  [1] => 08/21/2013
  [2] => 08/22/2013
  [3] => 08/23/2013
)

Array ([4] => 08/26/2013)

我应该指定它不仅仅是两个数组。不连续的日期每个都有自己的数组,连续的日期每个都在自己的数组中。

【问题讨论】:

  • 只是一个foreach循环,如果当前日期=最后日期+1,则添加到当前堆栈,否则,将当前堆栈添加到结果数组并开始一个新堆栈。
  • 您是否希望结果为 date_array[][],哪个 date_array[x][] 将包含所有连续日期,哪个 date_array[y][] 将包含另一个组?使用循环是个好主意。并将当前的与上一个进行比较。
  • 我检查第一次约会的依据是什么?
  • 只使用 for (var i = 0; i
  • 如果你使用foreach,你可以在foreach循环外设置is_first = true,在循环中使用if(is_first)来转义第一个循环,然后将is_first设置为false。

标签: php arrays date


【解决方案1】:

使用$arr 表示您的数组:

usort($arr, function ($a, $b){
    return strtotime($a) - strtotime($b);
});
$out = array();
$last = 0;
$dex = -1;
foreach ($arr as $key => $value){
    $current = strtotime($value);
    if ($current - $last > 86400) $dex++;
    $out[$dex][] = $value;
    $last = $current;
}
print_r($out);

输出:

Array
(
    [0] => Array
        (
            [0] => 08/20/2013
            [1] => 08/21/2013
            [2] => 08/22/2013
            [3] => 08/23/2013
        )

    [1] => Array
        (
            [0] => 08/26/2013
        )

)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2013-12-18
    相关资源
    最近更新 更多