简体   繁体   English

将日期数组拆分为年份和月份PHP

[英]Splitting array of dates into year and months PHP

I have an array of events. 我有一系列事件。

$events = array(

array(
    'title'=>'event title',
    'startDate'=> '2014-03-12',
    'endDate'=> '2014-03-12',
    'description'=> 'event description'
),
array(
    'title'=>'event title',
    'startDate'=> '2013-03-12',
    'endDate'=> '2013-05-23',
    'description'=> 'event description'
)

);

and I need to split them into arrays by year, and then by month. 我需要按年然后按月将它们分成数组。

So like : 像这样:

array(
    'year'=>'2014',
    'months'=>
        array(
            'Jan',
            'events'=>
                array(
                    'title'=>'event title',
                    'startDate'=> '2014-01-12',
                    'endDate'=> '2014-01-12',
                    'description'=> 'event description'
                ),
                array(
                    'title'=>'event title',
                    'startDate'=> '2014-03-12',
                    'endDate'=> '2014-03-12',
                    'description'=> 'event description'
                )
        )
),

I'm not a pro at programming and PHP so any help would be great. 我不是编程和PHP的专业人士,所以任何帮助都将非常有用。

The following code should produce something which you could use: 以下代码应产生可以使用的内容:

$ordered_events = array();

foreach ($events as $event) {
    list($startYear, $startMonth, $startDay) = split("-", $event['startDate']);
    $ordered_events[$startYear][$startMonth][$startDay][] = $event;
    if ($event['startDate'] != $event['endDate']) {
        list($endYear, $endMonth, $endDay) = split("-", $event['endDate']);
        $ordered_events[$endYear][$endMonth][$endDay][] = $event;
    }
}

Example output: 输出示例:

Array(
    [2014] => Array(
            [03] => Array(
                    [12] => Array(
                            [0] => Array(
                                    [title] => event title
                                    [startDate] => 2014-03-12
                                    [endDate] => 2014-03-12
                                    [description] => event description
                                )
                        )
                )
        )
    [2013] => Array(
            [03] => Array(
                    [12] => Array(
                            [0] => Array(
                                    [title] => event title
                                    [startDate] => 2013-03-12
                                    [endDate] => 2013-05-23
                                    [description] => event description
                                )
                        )
                )
            [05] => Array(
                    [23] => Array(
                            [0] => Array(
                                    [title] => event title
                                    [startDate] => 2013-03-12
                                    [endDate] => 2013-05-23
                                    [description] => event description
                                )
                        )
                )
        )
)

// Updated to add endDate. //更新以添加endDate。

try this 尝试这个

<?php
echo "<pre>";
$events = array(

array(
    'title'=>'event title',
    'startDate'=> '2014-01-12',
    'endDate'=> '2014-01-12',
    'description'=> 'event description'
),
array(
    'title'=>'event title',
    'startDate'=> '2014-01-15',
    'endDate'=> '2014-01-16',
    'description'=> 'event description'
),
array(
    'title'=>'event title',
    'startDate'=> '2014-03-9',
    'endDate'=> '2014-03-12',
    'description'=> 'event description'
),
array(
    'title'=>'event title',
    'startDate'=> '2013-03-12',
    'endDate'=> '2013-03-23',
    'description'=> 'event description'
),
array(
    'title'=>'event title',
    'startDate'=> '2013-03-31',
    'endDate'=> '2013-03-23',
    'description'=> 'event description'
)


);
echo "<b>Input : </b>";
print_r($events);
$arr_output = array();
foreach($events as $key=>$arr)
{
    $date = $arr['startDate'];
    $arr_dates = explode("-", $date);
    $year = $arr_dates[0];
    $month = $arr_dates[1];

    $arr_output[$year][$month][] = $arr;
}
echo "<b>Output : </b>";
print_r($arr_output);

OUTPUT ARRAY: 输出阵列:

Array
(
    [2014] => Array
        (
            [01] => Array
                (
                    [0] => Array
                        (
                            [title] => event title
                            [startDate] => 2014-01-12
                            [endDate] => 2014-01-12
                            [description] => event description
                        )

                    [1] => Array
                        (
                            [title] => event title
                            [startDate] => 2014-01-15
                            [endDate] => 2014-01-16
                            [description] => event description
                        )

                )

            [03] => Array
                (
                    [0] => Array
                        (
                            [title] => event title
                            [startDate] => 2014-03-9
                            [endDate] => 2014-03-12
                            [description] => event description
                        )

                )

        )

    [2013] => Array
        (
            [03] => Array
                (
                    [0] => Array
                        (
                            [title] => event title
                            [startDate] => 2013-03-12
                            [endDate] => 2013-03-23
                            [description] => event description
                        )

                    [1] => Array
                        (
                            [title] => event title
                            [startDate] => 2013-03-31
                            [endDate] => 2013-03-23
                            [description] => event description
                        )

                )

        )

) 

Demo 演示

Thanks Johan that worked, one issue i forgot to mention is that an event has a start and an end date. 感谢Johan的努力,我忘记提及的一个问题是事件有开始和结束日期。 Which means it can span across more than one month. 这意味着它可以跨越一个多月。 How would i go about sorting them into months, if the end date finishes in the next month along, it would need to show up in both months. 我如何将它们分为几个月,如果结束日期在下个月结束,则需要在两个月中都显示出来。

Appreciate all the help, you guys are life savers! 感谢所有帮助,你们是救生员!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM