我整理了一个广播时间表 PHP 脚本来读取 CSV 文件并根据时间和日期将结果发布在网站上。然而,它似乎发布了两次。
这是脚本:
<?php
// Step 1: Replace 'data.csv' with the path to your CSV file
$csvFile = 'schedule.csv';
// Step 2: Read CSV and store its contents in an array
if (($handle = fopen($csvFile, 'r')) !== false) {
$csvData = [];
while (($data = fgetcsv($handle)) !== false) {
$csvData[] = $data;
}
fclose($handle);
} else {
die("Error opening CSV file.");
}
// Step 3: Get the current day and time
$currentDay = date('l'); // l gives the full textual representation of the day (e.g., "Monday")
$currentHour = date('H'); // H gives the hour in 24-hour format (e.g., "13" for 1 PM)
// Adjust hour offset below.
$Hour = $currentHour+1;
// Step 4: Filter the array based on the current day and time
$filteredData = [];
foreach ($csvData as $row) {
// Assuming that your CSV file has a "Day" column and a "Time" column
$day = $row[0];
$time = intval($row[1]);
$program_name= $row[2];
$program_when= $row[2];
$program_img= $row[4];
// Check if the row matches the current day and time
if ($day === $currentDay && $Hour >= $time) {
$filteredData[] = $row;
}
}
// Step 5: Display the filtered data with CSS classes for each row
if (count($filteredData) > 0) {
foreach ($filteredData as $row) {
echo "<div class='row'>";
echo "<div class='col-5'>";
echo "<img src='$row[4]' width='90' height='90' border='0'>";
echo "</div>";
echo "<div class='col-7'>";
echo "<h3>$row[2]<br>$row[3]</h3>";
echo "</div>";
echo "</div>";
}
} else {
echo 'Not available.';
}
这是我在 CSV 文件中测试的数据:
Friday,12,MMV,until 1pm,top_mmv.png
Friday,13,MMV,until 2pm,top_mmv.png
Friday,14,MMV,until 3pm,top_mmv.png
Friday,15,MMV,until 4pm,top_mmv.png
但是当周五下午 2 点时,它会同时发布下午 1 点行和下午 2 点行。请问我做错了什么?
您需要指定您想要收集数据的条件,
if ($day === $currentDay && $Hour >= $time) {
例如现在当前时间是14点(+1小时是你的调整)
$小时 >= $时间
15 >= time from first line of csv is 12 - true
15 >= time from second line of csv is 13 - true
15 >= time from third line of csv is 14 - true
15 >= 15 - true
我想你能看出问题所在。
您向我们展示的代码实际上并没有演示您提到的问题?
但是,您可以简化该代码并消除对 2 个数组的需求,并使代码更易于阅读和维护,如下所示。
$currentDay = date('l'); // l gives the full textual representation of the day (e.g., "Monday")
$currentHour = date('H'); // H gives the hour in 24-hour format (e.g., "13" for 1 PM)
// Adjust hour offset below.
$Hour = $currentHour+1;
// The input file
$csvFile = 'schedule.csv';
// Step 2: Read CSV and process the output
if (($handle = fopen($csvFile, 'r')) !== false) {
while (($row = fgetcsv($handle)) !== false) {
$day = $row[0];
$time = intval($row[1]);
// Check if the row matches the current day and time
if ($day === $currentDay && $Hour >= $time) {
echo "<div class='row'>\n";
echo " <div class='col-5'>\n";
echo " <img src='$row[4]' width='90' height='90' border='0'>\n";
echo " </div>\n";
echo " <div class='col-7'>\n";
echo " <h3>$row[2]<br>$row[3]</h3>\n";
echo " </div>\n";
echo "</div>\n";
}
}
fclose($handle);
} else {
die("Error opening CSV file.");
}
并使用这些数据
Friday,12,MMV,until 1pm,top_mmv.png
Friday,13,MMV,until 2pm,top1_mmv.png
Friday,14,MMV,until 3pm,top2_mmv.png
Friday,15,MMV,until 4pm,top3_mmv.png
在 14:00 到 14:59 之间运行代码,输出为
<div class='row'>
<div class='col-5'>
<img src='top_mmv.png' width='90' height='90' border='0'>
</div>
<div class='col-7'>
<h3>MMV<br>until 1pm</h3>
</div>
</div>
<div class='row'>
<div class='col-5'>
<img src='top1_mmv.png' width='90' height='90' border='0'>
</div>
<div class='col-7'>
<h3>MMV<br>until 2pm</h3>
</div>
</div>
<div class='row'>
<div class='col-5'>
<img src='top2_mmv.png' width='90' height='90' border='0'>
</div>
<div class='col-7'>
<h3>MMV<br>until 3pm</h3>
</div>
</div>
这有什么问题吗?