因此,我正在使用以下代码生成两个日期之间所有日期的无序列表。它工作正常,但我想用一种打印方式来创建嵌套的列表,这些嵌套列表会存储年月,然后显示日期,即...
- 2019
- February
- 02-01-2019
- January
- 01-01-2019
- 01-02-2019
...
...
- 2018
...
- 2017
...
如何才能轻松实现这一目标?
<?
$begin = new DateTime( '2017-03-12' );
$end = new DateTime('2019-02-15');
$interval = new DateInterval('P1D');
$daterange = new DatePeriod($begin, $interval ,$end);
$sdcheck = array();
foreach($daterange as $date){
$sdcheck[] = "<li>".$date->format("m-d-Y")."</li>";
}
?>
<ul>
<?
$sdcheck = array_reverse($sdcheck);
echo implode($sdcheck);
?>
</ul>
答案 0 :(得分:1)
我做了一些更改,使其更“容易”。我没有改变数组的各个级别,而是对其进行了更改,以便日期周期是反向生成的。我还根据日期对临时数组进行了级别划分,因此现在为[2019][April][]
,因此已经分为年和月。
然后是使用嵌套foreach
循环生成各种级别的列表的情况...
$begin = new DateTime( '2018-03-16' );
$end = new DateTime();
$interval = DateInterval::createFromDateString('-1 day');
$daterange = new DatePeriod($end, $interval ,$end->diff($begin)->days);
$sdcheck = array();
foreach($daterange as $date){
$sdcheck[$date->format("Y")][$date->format("F")][] = "<li>".$date->format("m-d-Y")."</li>";
}
$output = "<ul>";
foreach ( $sdcheck as $year=>$months ) {
$output .="<li>".$year."<ul>";
foreach ( $months as $month=>$dates ) {
$output .="<li>".$month."<ul>";
$output .=implode($dates)."</ul>".PHP_EOL;
}
$output .="</ul>";
}
$output .="</ul>";
echo $output;
答案 1 :(得分:0)
一种简单的方法是:
function createList($daterange)
{
$sdcheck = [];
foreach($daterange as $date){
$sdcheck[$date->format('Y')][$date->format('F')][$date->format("m-d-Y")] = $date->format("m-d-Y");
}
$html = '';
foreach ($sdcheck as $key => $element) {
$html .= '<ul><li>' . $key;
if (is_array($element)) {
$html .= createList($element);
}
$html .= '</li></ul>';
}
return $html;
}