Я хочу сгруппировать мой массив по неделе в php - PullRequest
0 голосов
/ 24 февраля 2019
$date = array('01-01-2019','02-01-2019','05-01-2019','22-01-2019','02-02-2019','03-02-2019','24-02-2019');

Выше мой массив, я хочу сгруппировать даты по неделям, чтобы правильно отображать их в отчетах.Так будет выглядеть так:

Array
(
    [31-12-2018/06-01-2019] => Array  // this is based in calendar week
        (
            [0] => 01-01-2019
            [1] => 02-01-2019
            [2] => 05-01-2019
        )

    [21-01-2019/27-01-2019] => Array
        (
            [0] => 22-01-2019
        )

    [28-01-2019/03-02-2019] => Array
        (
            [0] => 02-02-2019
            [1] => 03-02-2019
        )

    [18-02-2019/24-02-2019] =>  Array
    (
        [0] => 24-02-2019
    )
)

это основано на календарной неделе с понедельника по воскресенье enter image description here

1 Ответ

0 голосов
/ 24 февраля 2019

Этот код будет делать то, что вы хотите.Он преобразует каждое значение даты в объект DateTime, находит начало и конец недели для этой даты, а затем помещает значение в новый массив, индексированный значениями начала и конца недели:

$date = array('01-01-2019','02-01-2019','05-01-2019','22-01-2019','02-02-2019','03-02-2019','24-02-2019');
$dates = array();
foreach ($date as $d) {
    $od = date_create_from_format('d-m-Y', $d);
    // get start and end of this week
    $sow = $od->sub(new DateInterval('P' . ($od->format('N') - 1). 'D'))->format('d-m-Y');
    $eow = $od->add(new DateInterval('P6D'))->format('d-m-Y');
    $dates["$sow/$eow"][] = $d;
}
print_r($dates);

Вывод:

Array (
    [31-12-2018/06-01-2019] => Array ( 
        [0] => 01-01-2019
        [1] => 02-01-2019
        [2] => 05-01-2019 
    )
    [21-01-2019/27-01-2019] => Array (
        [0] => 22-01-2019
    )
    [28-01-2019/03-02-2019] => Array (
        [0] => 02-02-2019
        [1] => 03-02-2019
    )
    [18-02-2019/24-02-2019] => Array (
        [0] => 24-02-2019
    )
)

Демонстрация на 3v4l.org

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...