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
我在 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