通过简单的html dom在html表格中计算比赛日



我想找到总体天数,使用简单的html dom已经播放的时间表.htm文件的天数。

.htm文件如下所示:

<tr><th>November 1 2020</th></tr>
<tr><th>visitor</th><th>score</th><th>home</th><th>score</th></tr>
<tr><td><a href="Wizards.htm">Wizards</a></td><td>120</td><td><a href="Hawks.htm">Hawks</a></td>111<td></td></tr>
<tr><td><a href="Celtics.htm">Celtics</a></td><td>98</td><td><a href="Heat.htm">Heat</a></td><td>108</td></tr>
<tr><th>November 2 2020</th></tr>
<tr><th>visitor</th><th>score</th><th>home</th><th>score</th></tr>
<tr><td><a href="Nets.htm">Nets</a></td><td>95</td><td><a href="Cavaliers.htm">Cavaliers</a></td>98<td></td></tr>
<tr><td><a href="Knicks.htm">Knicks</a></td><td>110</td><td><a href="Hornets.htm">Hornets</a></td><td>100</td></tr>
<tr><th>November 3 2020</th></tr>
<tr><th>visitor</th><th>score</th><th>home</th><th>score</th></tr>
<tr><td><a href="Thunder.htm">Thunder</a></td><td></td><td><a href="Timberwolves.htm">Timberwolves</a></td><td></td></tr>
<tr><td><a href="Trailblazers.htm">Trailblazers</a></td><td></td><td><a href="Lakers.htm">Lakers
... and so on... 

请注意,游戏数量可能每天有所不同。 在上面的示例中,总金额为 = 3,播放 = 2,未播放 = 1。

到目前为止,我已经提出了这个:

$days = 0;
$days_played = 0;
$days_unplayed = $days - $days_played;
// find every row 
foreach($table->find('tr') as $row) { 
// if row contains month then add a match-day
if (strpos($row->find('th', 0)), 'November') OR
strpos($row->find('th', 0)), 'December') OR
strpos($row->find('th', 0)), 'January') OR
strpos($row->find('th', 0)), 'February') OR
strpos($row->find('th', 0)), 'March') OR
strpos($row->find('th', 0)), 'April') OR
strpos($row->find('th', 0)), 'May') !== false) {
$days = $days + 1;
}

我知道这不是最漂亮的解决方案,但到目前为止它有效。

我的问题是,我不知道如何获得包含玩/得分游戏的日子。我可以通过这个找到游戏本身...

$row->find('td', 1)

。因为带有 TDS 的行的第二列始终包含一个分数。但是我只需要为每个比赛日计算其中一个,否则我会得出比赛的数量而不是比赛日。

由于我被困在这里,我真的很感激你的意见。提前谢谢。

如果要检查月份和日期,一种选择可能是使用DateTime::createFromFormat使用 DateTime 并检查月份名称和日期名称。

此页面概述了不同格式

$months = ["November", "December"];
foreach($table->find('tr') as $row) {    
$res = $row->find('th', 0);
if ($res && $counter%4 ===  0) {
$dateTime = DateTime::createFromFormat("F d Y", $res->innertext());
$month = $dateTime->format("F");
$day = $dateTime->format("l");
if (in_array($month, $months) && $day === "Sunday") { // I don't know the play day
$days = $days + 1; 
}
}
$counter++;    
}
var_dump($days);

输出

1

最新更新