【发布时间】:2018-11-27 14:16:09
【问题描述】:
我需要一个 PHP 函数来返回一个多维数组,以便在日期之间有每年的天数:
Es:
daysinyears('17-06-2012', '28-07-2018')
必须返回这个数组:
Array ( [0] => Array ([year] => 2018, [days] => 208),
[1] => Array ([year] => 2017, [days] => 364),
[2] => Array ([year] => 2016, [days] => 365),
[3] => Array ([year] => 2015, [days] => 364),
[4] => Array ([year] => 2014, [days] => 364),
[5] => Array ([year] => 2013, [days] => 365),
[6] => Array ([year] => 2012, [days] => 197)
)
这就是我所做的;
function daysinyears($d1, $d2) {
// swap dates if wrong order
if ($d1 > $d2) {
$aux = $d1;
$d1 = $d2;
$d2 = $aux;
}
// if same year, just count days with date_diff
if ($d1->format("Y") == $d2->format("Y")) {
$days_year = array('year' => $d1->format("Y"),
'days' => date_diff($d2, $d1)->format('%a'));
$arr[] = $days_year;
} else {
$days_year = array('year' => $d2->format("Y"),
'days' => date_diff($d2, date_create(date('d-m-Y',strtotime('01-01-'.$d2->format("Y")))))->format('%a'));
$arr[] = $days_year;
$year_prec = $d2->format("Y")-1;
// Recursion
$arr[] = daysinyears($d1, date_create(date('d-m-Y',strtotime('31-12-'.$year_prec))));
}
return $arr;
}
它“有效”,但问题是递归在另一个内部创建了一个数组,如下所示:
[0] => Array (
[year] => 2018
[days] => 208
)
[1] => Array (
[0] => Array (
[year] => 2017
[days] => 364
)
[1] => Array (
[0] => Array (
[year] => 2016
[days] => 365
)
[1] => Array (
[0] => Array (
[year] => 2015
[days] => 364
)
[1] => Array (
[0] => Array (
[year] => 2014
[days] => 364
)
[1] => Array (
[0] => Array (
[year] => 2013
[days] => 364
)
[1] => Array (
[0] => Array (
[year] => 2012
[days] => 197
)
)
)
)
)
)
)
如果不返回这些中文框,我无法理解如何使用递归。
【问题讨论】:
-
现在您必须使用 foreach 访问这些中文框:D
标签: php date recursion multidimensional-array