0

find('tr')[0]; の理由 テーブル行 1 の代わりにテーブル行 2 を取得しますか?

これは私の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

1つの問題が 2 つ表示さます。

最初の 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>

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

上記が機能しない場合は、次のように検索しtrますtbody

$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 に答える