0

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

由于某种原因,这得到了 Date 这个词。我不明白为什么,我确实需要它,但尽管它有效 - 我现在无法访问表第 1 行。抓住这个词说“嗨”。

4

2 回答 2

1

我看到两个一个问题:

你的第一个<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>

于 2013-08-29T11:54:26.820 回答
0

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

如果上述方法不起作用,那么trtbody类似的地方找到

$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>';
}
于 2013-08-29T11:57:06.860 回答