我正在使用simple_html_dom尝试从看起来像这样的表中获取标题和(可能多次):
<tr></tr>
<tr>
<td class="title">Some title</td>
</tr>
<tr>
<td class="time">11:00</td>
</tr>
<tr></tr>
<tr>
<td class="title">Another title</td>
</tr>
<tr>
<td class="time">16:00 22:00</td>
</tr>
<tr>
<td class="time">21:00</td>
</tr>
// And so on
我的simple_html_dom目前设置如下:
foreach($html->find('tr') as $film) {
$title = $film->find('td.title',0)->plaintext;
$time = $film->find('td.time',0)->plaintext;
if ($time) {
$showtimes .= ' '.$time;
}
if ($title) {
echo $title
if (!empty($showtimes)) {
echo $showtimes;
}
}
标题可能有重复(可以),任何单个标题可能有多次。
长话短说,我可以到达那里,但它很混乱,我不会得到一个整齐的标题列表,其中包含可以轻松使用的相关时间 - 即转储这一切都进入了数据库。
有什么建议吗?
答案 0 :(得分:1)
第一步是迭代所有td.title
。对于其中的每一项,td.time
将始终位于以下tr
中,因此:
foreach($html->find('td.title') as $td) {
$title = $td->text();
$times = array();
while(($tr = $td->parent->next_sibling()) && ($td = $tr->find('td.time', 0))){
$times[] = $td->text();
}
var_dump($title, $times);
}
答案 1 :(得分:0)
确实是一个令人敬畏的HTML代码:&gt;
尝试:
foreach($html->find('tr td') as $row) {
if ($row->class == 'title') {
echo "<br>".$row->plaintext;
}
elseif ($row->class == 'time') {
echo "\t".$row->plaintext;
}
}
<强>输出
Some title 11:00
Another title 16:00 21:00
您还可以使用在找到class="title"
时更改的标记
我希望这会给你一些想法:)