将日期数组划分为连续的块

Tra*_*ist 6 php arrays

可能重复:
检查集合中的连续日期并返回范围

我有一个日期数组,它是从mySQL查询中获得的.我需要将数组分成多个数组,以便每个数组中的日期是连续的.

所以,如果我开始

$datearray = array("2013-05-05", "2013-05-06", "2013-05-07", "2013-05-08", "2013-06-19", "2013-06-20", "2013-06-21");
Run Code Online (Sandbox Code Playgroud)

我需要能够把它分成两部分

$firstdatearray = array("2013-05-05", "2013-05-06", "2013-05-07", "2013-05-08");
$seconddatearray = array("2013-06-29", "2013-06-30", "2013-07-01");
Run Code Online (Sandbox Code Playgroud)

最后我将能够打印

3月5日至8月3日,7月29日至7月1日

我怎样才能做到这一点?我不知道从哪里开始.

mrb*_*000 5

这是完整的工作答案。(享受!)

您必须遍历 $datearray 中的每个值

<?php

$datearray = array("2013-05-05", "2013-05-06", "2013-05-07", "2013-05-08", "2013-06-19", "2013-06-20", "2013-06-21");
asort($datearray);
$resultArray = array();
$index = -1;
$last = 0;
$out = "";

foreach ($datearray as $date) {
    $ts = strtotime($date);
    if (false !== $ts) {
        $diff = $ts - $last;

        if ($diff > 86400) {
            $index = $index + 1;
            $resultArray[$index][] = $date;
        } elseif ($diff > 0) {
            $resultArray[$index][] = $date;
        } else {
            // Error! dates are not in order from small to large
        }
        $last = $ts;
    }
}

foreach ($resultArray as $a) {
    if (count($a) > 1) {
        $firstDate = $a[0];
        $firstDateBits = explode('-',$firstDate);
        $lastDate = $a[count($a)-1];
        $lastDateBits = explode('-',$lastDate);

        if ($firstDateBits[1] === $lastDateBits[1]) {
            $out .= intval($firstDateBits[2]) . '-' . intval($lastDateBits[2]) . ' ' . date("M",strtotime($firstDate)) . ', ';  
        } else {
            $out .= date("M d",strtotime($firstDate)) . '-' . date("M d",strtotime($lastDate)) . ', ';  
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

5-8 May, 19-21 Jun
Run Code Online (Sandbox Code Playgroud)