小小学生 发表于 2021-3-16 11:10

PHP怎么输出一个数组中连续的日期?

$dates = [
            '2018-10-09',
            '2018-10-10',
            '2018-10-11',
            '2018-10-13',
            '2018-10-15',
            '2018-10-31',
            '2018-11-01',
            '2018-11-02'
            ];
比如这样 怎么把数组中每个连续的日期又再放到一个数组中,实现的结果是这样
$dates = [
            ['2018-10-09',
            '2018-10-10',
            '2018-10-11'],
            '2018-10-13',
            '2018-10-15',
            ['2018-10-31',
            '2018-11-01',
            '2018-11-02']
            ];

reetin 发表于 2021-3-16 11:41

已知你的数据项是从小到大,循环判断项目X与X+1的大小关系,如果相邻新字符串string=string.",".(x+1);,如果不相邻,则新字符串string=string."】,【".x+1;,然后新字符串string转数组。

fanvalen 发表于 2021-3-16 12:40

难道没有数组切片,需要遍历才能得到

gentledream 发表于 2021-3-16 12:48

前面加一等于后面的就,不等于就不组到一块

Mr阿狸先森 发表于 2021-3-16 13:16

<?php
$dates = [
            '2018-10-09',
            '2018-10-10',
            '2018-10-11',
            '2018-10-13',
            '2018-10-15',
            '2018-10-31',
            '2018-11-01',
            '2018-11-02'
            ];
$data=[];//新数组
$differ =60*60*24; //一天最大时间
$num = 0; //新二位数组坐标
foreach ($dates as $key => $value) {
        if($key == 0) { //首元素
                $data[$num][]= $value;
        } else {//不是首元素
                        //strtotime字符串转换时间
                if((strtotime($value)-strtotime($dates[$key-1]))<=$differ) { //判断当前数组元素值 和 上个数组元素值是否是否差 一天
                       
                        $data[$num][]= $value;
                } else {   
                        $num++;
                        $data[$num][]= $value;
                }
        }
}
echo "<pre>";
var_dump($data);
echo "</pre>"
?>

Mr阿狸先森 发表于 2021-3-16 13:28

运行结果                                          

小迷糊 发表于 2021-3-16 15:26

Mr阿狸先森 发表于 2021-3-16 13:16


初始化数组再做一次升序排列就更好了
页: [1]
查看完整版本: PHP怎么输出一个数组中连续的日期?