Php 为什么simple#html#U dom find(';tr';)[0]获取表第2行而不是表第1行?
为什么find('tr')[0];是否获取表第2行而不是表第1行 这是我的html,所有表都有相同的类和布局Php 为什么simple#html#U dom find(';tr';)[0]获取表第2行而不是表第1行?,php,simple-html-dom,Php,Simple Html Dom,为什么find('tr')[0];是否获取表第2行而不是表第1行 这是我的html,所有表都有相同的类和布局 <table class="tablemenu"> <tbody> <tr> <td><b>hello</b></td> <td><b>hi</b></td> </tr&
<table class="tablemenu">
<tbody>
<tr>
<td><b>hello</b></td>
<td><b>hi</b></td>
</tr>
<tr>
<td>hey</td>
<td>Alright</td>
<td>Good</td>
<td>Good</td>
<td><a>Date</a></td>
</tr>
</tbody>
</table>
<table class="tablemenu">
<tbody>
<tr>
<td><b>hello</b></td>
<td><b>hi</b></td>
</tr>
<tr>
<td>hey</td>
<td>Alright</td>
<td>Good</td>
<td>Good</td>
<td><a>Date</a></td>
</tr>
</tbody>
</table>
<table class="tablemenu">
<tbody>
<tr>
<td><b>hello</b></td>
<td><a>hi</a></td>
</tr>
<tr>
<td>hey</td>
<td>Alright</td>
<td>Good</td>
<td>Good</td>
<td><a>LINK</a></td>
</tr>
</tbody>
</table>
但这不起作用,它说未定义索引
然后我尝试了这个只是胡闹,它的工作
$Link = $element->find('tr')[0]->find('td')[4]->find('a')[0];
出于某种原因,它会得到Date这个词。我不明白为什么,我确实需要,但是
虽然它可以工作-我现在无法访问表第1行。要抓住“嗨”这个词,我看到两个问题:
您的第一个
只有2个
s,因此$element->find('tr')[0]->find('td')[4]
应该引发异常
编辑操作固定粘贴代码
修正你的标记。您没有正确关闭
元素:
<table class="tablemenu">
<tbody>
<tr>
<td><b>hello</b></td>
<td><b>hi</b></td>
</tr> <!-- close this! --->
<tr>
<td>hey</td>
<td>Alright</td>
<td>Good</td>
<td><a>Date</a></td>
</tr> <!-- close this! --->
</tbody>
</table>
你好
你好
嘿
好吧
好
日期
由于没有正确关闭
tr标签,索引错误
链接应位于第一个索引上,而不是第零个索引上
$Link = $element->find('tr')[1]->find('td')[4]->find('a')[0];
要打印
hi请尝试
echo $element->find('tr')[0]->find('td')[1]->find('b')[0]->text();
完整代码
foreach($html->find('table[class=tablemenu]') as $element){
$Link = $element->find('tr')[1]->find('td')[4]->find('a')[0];
echo($Link->text());
echo '<br />';
echo $element->find('tr')[0]->find('td')[1]->find('b')[0]->text();
}
另外,对于调试,请尝试以下操作
foreach($html->find('table[class=tablemenu]') as $element){
echo '<pre>';
var_dump($element);// find the object here
echo '</pre>';
}
foreach($html->find('table[class=tablemenu]')作为$element){
回声';
var_dump($element);//在此处查找对象
回声';
}
tr[0]中没有4个td如果你使用像Netbeans这样的IDE,它会突出显示此类错误,你也不会浪费太多时间在上面询问。我有一个IDE Nusphere phpED,它突出显示$element->find('tr')[0]>上零的左括号,但很抱歉,我只是快速输入了这个,我的代码中有5个s,我的tr正确关闭了,我现在将在我的问题中编辑它,你现在有什么想法吗?对不起,我刚刚快速输入了这个,我的代码中有5个s,我的tr正确关闭了,我现在将在我的问题中编辑它,你现在有什么想法吗?我知道,但它没有得到“日期”,我想知道为什么是这样。因为“日期”在您的第二个
中,您的语句($element->find('tr')[0]
)只选择第一个
$element->find('tr')[0])“是”打印日期,我想知道为什么我刚才快速键入了这个,我的代码中有5个s,我的tr正确关闭了,我现在将在我的问题中编辑它。你现在有什么想法吗?我尝试了“$Link=$element->find('tbody')->find('tr')[1]->find('td')[4]->find('a')[0];”但我抛出了一个错误致命错误:调用成员函数find()在一个非对象上,调试选项如何?
?我正在查看它,试图找到标签会让我头晕,会让你知道,我一直在使用firebug,这是个坏主意吗?
foreach($html->find('table[class=tablemenu]') as $element){
$Link = $element->find('tr')[1]->find('td')[4]->find('a')[0];
echo($Link->text());
echo '<br />';
echo $element->find('tr')[0]->find('td')[1]->find('b')[0]->text();
}
$Link = $element->find('tbody')->find('tr')[1]->find('td')[4]->find('a')[0];
foreach($html->find('table[class=tablemenu]') as $element){
echo '<pre>';
var_dump($element);// find the object here
echo '</pre>';
}