Php 为什么simple#html#U dom find(';tr';)[0]获取表第2行而不是表第1行?

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&

为什么find('tr')[0];是否获取表第2行而不是表第1行

这是我的html,所有表都有相同的类和布局

<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>';
}