Я пытаюсь создать конечную точку для календаря, который будет использоваться для добавления событий.

Я хочу попробовать использовать json и создать его для последующего синтаксического анализа в виде календаря.

Затем попробуйте добавить события, объединив данные json, как показано здесь:

На данный момент я изо всех сил пытаюсь передать другие данные в конечную точку. Вот что у меня есть на данный момент:

// build variables
$getStart = '2020-01-01'; // come from $_GET

$monthStartDate = new DateTime( $getStart );
$monthFinishDate = clone $monthStartDate;
$monthFinishDate->modify('last day of december');
$monthInterval = new DateInterval( 'P1M' );

// set the variables
$monthRange = new DatePeriod(
                $monthStartDate,
                $monthInterval,
                $monthFinishDate
            );

// loop the months
foreach ($monthRange as $month) {

    // loop the days
    $dayStartDate = new DateTime( $month->format('M') );
    $dayFinishDate = clone $dayStartDate;
    $dayFinishDate->modify('next month');
    $dayInterval = new DateInterval( 'P1D' );

    $dayRange = new DatePeriod(
                    $dayStartDate,
                    $dayInterval,
                    $dayFinishDate
    );

    // build the calendar json
    $calendar[] = [ $month->format('m') => [
                        'year'  => $month->format('Y'),
                        'month' => $month->format('F'),
                        'days' => [

                            // error here because loop in $array
                            foreach( $dayRange as $day ) {
                                $day->format('d') => [
                                    'dayOfWeek' => $day->format('l'),
                                    'events' => []
                                ],
                            }
                        ],
                    ]];
}

// print it
echo json_encode($calendar);

Я почти уверен, что это из-за петли внутри стрелки, но я не могу придумать другого способа получить дни в этом месяце.

-1
markb 1 Сен 2020 в 09:36

2 ответа

Лучший ответ

Сначала вам нужно будет создать массив дней, поэтому foreach создаст массив дней, а затем добавит завершенный массив в календарь ...

$days = [];
foreach( $dayRange as $day ) {
    $days[$day->format('d')] = [
            'dayOfWeek' => $day->format('l'),
            'events' => []
    ];
}
$calendar[] = [ $month->format('m') => [
        'year'  => $month->format('Y'),
        'month' => $month->format('F'),
        'days' => $days
        ]
        
];
0
Nigel Ren 1 Сен 2020 в 06:52

Действительно, вы не можете использовать foreach внутри массива. Здесь вы можете использовать для этого функцию:

function dayRangeLoop($dayRange) {
    $result = [];
    foreach( $dayRange as $day ) {
        $result[$day->format('d')] = [
            'dayOfWeek' => $day->format('l'),
            'events' => []
        ];
    }
    return $result;
}

А затем вызовите его в сборке вашего календаря:

// build the calendar json
$calendar[] = [ $month->format('m') => [
    'year'  => $month->format('Y'),
    'month' => $month->format('F'),
    'days' => dayRangeLoop($dayRange)
]];
0
fpietka 1 Сен 2020 в 06:53