Я бы хотел получить информацию из этой таблицы:
<table>
<tbody>
<tr>
<th rowspan="1">Monday</th>
<td colspan="3" class="closed">Closed</td>
</tr>
<tr class="sep"></tr>
<tr>
<th rowspan="3">Tuesday</th>
<td>12:30 pm</td>
<td class="sep">-</td>
<td>2:00 pm</td>
</tr>
<tr>
<td>7:30 pm</td>
<td class="sep">-</td>
<td>10:00 pm</td>
</tr>
<tr class="sep"></tr>
<tr>
<th rowspan="3">Wednesday</th>
<td>12:30 pm</td>
<td class="sep">-</td>
<td>2:00 pm</td>
</tr>
<tr>
<td>7:30 pm</td>
<td class="sep">-</td>
<td>10:00 pm</td>
</tr>
...
<tr class="sep"></tr>
</tbody>
</table>
Я использую это, чтобы получить часы с PHP и Xpath:
$h = 0;
preg_match_all('/<table.*?>(.*?)<\/table>/is', $page, $hours);
$dom = new domDocument;
$dom->loadHTML($hours[0][0]);
$dom->preserveWhiteSpace = false;
$tables = $dom->getElementsByTagName('table');
$rows = $tables->item(0)->getElementsByTagName('tr');
foreach ($rows as $row) {
if($row->getAttribute('class') == 'sep') {}
else {
$cols = $row->getElementsByTagName('td');
if($cols->item(0)->nodeValue == 'Closed') {
$datas[$activity]['hours']['day'.$h] = 'Closed';
}
else {
$datas[$activity]['hours']['day'.$h]['open'] = $cols->item(0)->nodeValue;
$datas[$activity]['hours']['day'.$h]['close'] = $cols->item(2)->nodeValue;
}
$h++;
}
}
Проблема для день, как вторник, у меня есть два набора часов (полдень и вечер). Мой код работает, но разделяет данные на две части.
Знаете почему?
Спасибо.