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


why does simple_html_dom find('tr')[0] get table row 2 instead of table row 1?

为什么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>

这是我的php

<?php
include("simpleHtmlDom/simple_html_dom.php");
$html = new simple_html_dom();
// Load a file 
$html->load_file('http://mySite.net/');
foreach($html->find('table[class=tablemenu]') as $element){
 $Link = $element->find('tr')[0]->find('td')[4]->find('a')[0];        
  echo($Link->text());             
  echo '<br />'; 
}
?>

起初,为了得到"日期"这个词,我尝试了

$Link = $element->find('tr')[1]->find('td')[4]->find('a')[0]; 

但这并没有起作用,它说未定义的索引。

然后我试着把它弄得一团糟,它起到了的作用

$Link = $element->find('tr')[0]->find('td')[4]->find('a')[0];

出于某种原因,这得到了"日期"一词。我不明白为什么,我确实需要,但是尽管它有效,但我现在无法访问表的第1行。抓住单词说"嗨"。

我看到两个一个问题s:

您的第一个<tr>只有2个<td>,所以$element->find('tr')[0]->find('td')[4]应该抛出一个异常。

编辑OP修复粘贴的代码

修复标记。您没有正确关闭<tr>元素:

<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>

存在wrong indexing,因为您没有正确关闭tr tags

链接应该在第一个索引上,而不是在第零个索引上

$Link = $element->find('tr')[1]->find('td')[4]->find('a')[0];   

print尝试

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();  
}

如果以上不起作用,则在类似的tbody中查找tr

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