TCPDF JSON 年假安排

TCPDF JSON Annual Leave Scheduling

我在 PHP 中使用 TCPDF,并希望打印类似年假计划表的内容。 (Table 每个用户在一行中有员工姓名和事件(日历))

我正在使用这个非常基本的 TCPDF-PHP-文件:

<?php
include('library/tcpdf.php');

$pdf = new TCPDF('P','mm','A4');

$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);

$pdf->AddPage();

$html = "
    <table>
        <tr>
            <th>ID</th>
        </tr>
        ";

$file = file_get_contents('MOCK_DATA-100.json');
$data = json_decode($file);

foreach($data as $student){ 
    $html .= "
            <tr>
                <td>". $student->id ."</td>
            </tr>
            ";
}       

$html .= "
    </table>
";

$pdf->WriteHTMLCell(192,0,9,'',$html,0);    

$pdf->Output();

这是 JSON- 用户的文件:

[{"id":"1","name":"Emerson, Adam"},
  {"id":"2","name":"Irwin, Cheryl"}]

这是JSON-事件文件(日历):

[
  {"start":"2021-06-21T00:00:00","end":"2021-06-23T12:00:00","resource":"6","id":"32"},
  {"start":"2021-06-28T00:00:00","end":"2021-07-01T00:00:00","resource":"4","id":"34"}
]

资源是用户的ID!

Table 应该每月创建日期。 我找到了这段代码并检查了它是否有效 - 它是!

$month = date('m');
$year  = date('Y');
$day   = date('d');


if (isset($_GET['month'])) {
    $month = $_GET['month'];
}

$days = cal_days_in_month(CAL_GREGORIAN, $month, $year);

$days = $days + 1;

for ($j = 0; $j < $days; $j++) {
    echo "<th>$j</th>";
}

所以现在我不知道如何创建一个 PHP-Loop 将事件 (json) 分配给用户 (json) 取决于身份证。重要的是,因为它是一个日历,所以每个事件都出现在用户的行中,并在列中的正确日期出现。可能有一个简单的“X”或类似的东西。

这是一张图片,如果文字过多:

如果您能帮我解决这个问题,我将不胜感激。 最好的祝福, 菲恩

您可以 运行 另一个循环来检查日历并为每个学生填充日期。下面的示例代码。

$month = date('m');
$year  = date('Y');
$day   = date('d');

if (isset($_GET['month'])) {
  $month = $_GET['month'];
}

$file = file_get_contents('MOCK_DATA-100.json');
$data = json_decode($file);

$file2 = file_get_contents('calendar.json');
$data2 = json_decode($file2);

$stuArr = [];

foreach($data as $student) { 
        $id = $student->id;

        foreach($data2 as $cal) {
            if($cal->resource == $id) {
                $start  = new DateTime(substr($cal->start, 0, 10));
                $end    = new DateTime(substr($cal->end, 0, 10));
                $interval = DateInterval::createFromDateString('1 day');
                $period   = new DatePeriod($start, $interval, $end);                    

                $dd         = [];
                if($month == $start->format('n')) {
                    foreach ($period as $dt) {
                        if($month != $dt->format('n'))
                            break;
                        $dd[]   = $dt->format("j");
                    }
                    $stuArr[] = [$id, $dd];
                }
            }
        }

}

foreach($stuArr as $student) {
    $id     = $student[0];
    $dates  = $student[1];
    /* 
    The above $dates variable contains the dates. 
    You can use in_array() to check whether a particular day is there in the $dates or not.
    Rest you can code for printing properly
    */
}

现在打印 header 天后,循环遍历 stuArr 打印 X