gpt4 book ai didi

php - 在 PHP 中组合日期范围的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:22:04 25 4
gpt4 key购买 nike

我有一个数组,在键/值中有开始和结束日期。例如。

/* formate 'mm/dd/yyyy'=>  'mm/dd/yyyy'*/

$arr = array(
'01/01/2016'=>'01/01/2016',
'01/02/2016'=>'01/02/2016',
'01/03/2016'=>'01/03/2016',


'04/10/2016'=>'04/10/2016',
'04/11/2016'=>'04/11/2016',
'04/12/2016'=>'04/12/2016',


'04/25/2016'=>'04/25/2016',

'04/30/2016'=>'04/30/2016',
'05/01/2016'=>'05/01/2016',
'05/02/2016'=>'05/02/2016' }

)

在这里你可以看到一些元素有连续的日期。例如。前三个元素的日期是 04/01 到 04/03。我想要一个元素。所以新数组应该是这样的 >

$arr = array(
'01/01/2016'=>'01/03/2016',

'04/10/2016'=>'04/12/2016',

'04/25/2016'=>'04/25/2016',

'04/30/2016'=>'05/02/2016'
})

怎么做到的?

谢谢

最佳答案

我知道已经有了答案,但这是我的版本 - 花了一些时间所以想分享!

在您的示例中,我假设您的原始数组是按日期顺序排列的,并且键和值始终相同。

您可以使用函数迭代原始数据集并返回分组日期数组,如下所示...

function group_dates($dates_array) {

// prepare results array
$result = array();

// take the first date from the submitted array
$group_start = array_shift($dates_array);
$timestamp_previous_iteration = strtotime($group_start);

// iterate over remaining values
foreach ($dates_array as $date) {
// calculate current iteration's timestamp
$timestamp_current = strtotime($date);

// calculate timestamp for 1 day before the current value
$timestamp_yesterday = strtotime('-1 day', $timestamp_current);

if ($timestamp_previous_iteration != $timestamp_yesterday) {
// create group...
$result[$group_start] = date('m/d/Y', $timestamp_previous_iteration);
// ...and store the next group's start date
$group_start = $date;
}

// log timestamp for next iteration
$timestamp_previous_iteration = $timestamp_current;
}

// add final group
$result[$group_start] = date('m/d/Y', $timestamp_previous_iteration);

return $result;
}

然后您可以按如下方式使用该函数,

$result_array = group_dates($arr);

在您的示例中为函数提供数组将按照您的要求生成一个数组。

由于您的日期格式为 MM/DD/YYYY,字符串将被 strtotime() 正确转换为 unix 时间戳。如果您使用其他日期格式,您将需要查看 PHP DateTime 对象。

引用资料
http://php.net/manual/en/function.strtotime.php
http://php.net/manual/en/book.datetime.php

关于php - 在 PHP 中组合日期范围的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39806016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com