2011-02-01 21 views
0

私はちょうどPHPを自分で教えようとし始めましたし、ちょっとした助けが必要です。 DOMを使用して、HTMLテーブルを解析して結果をMySQLデータベースに入れようとしていますが、問題があります。 私はこれでテーブルの各行をエコーすることができる午前:解析されたHTMLテーブルから配列を作成する

foreach ($html->find('table') as $table) 
foreach ($table->find("tr") as $rows) 
    echo $rows."<br />"; 

データはこの構造を有する:

<tr> 
<a href=http://some link>text1</a> 
<td class="...">text2</td> 
<td class="...">text3</td> 
<td class="...">text4</td> 
</tr> 

私は配列にリンクしてtext1-4を取得しようとしています、それを理解することはできません。どんな助けもありがとう。 --Edit--
これは分解しようとしているテーブルレイアウトです。

<tr> 
<th class="school first"> 
    <ahref="/local/team/home.aspx?schoolid=472d8593">Aberdeen</a> 
</th> 
<td class="mascot">Bulldogs</td> 
<td class="city">Aberdeen</td> 
<td class="state last">MS</td> 
</tr> 

jnpclの答えは私にこの

ROW 
    TEXT: Bulldogs 
    TEXT: Aberdeen 
    TEXT: MS 

が、リンクなしを与えます。私はおそらく私の元の質問では十分に具体的ではありませんでしたが、私が言ったように、私は学ぶことを試みています、そして、私は通常、プールの深いところで飛び降りることによってそれを行います。

+0

は、あなたのHTMLは、実際にそのようにフォーマットされていますか?あなたの ''要素は実際のテーブルセルの中にはありません... – drudge

+0

DOMは何ですか?これは組み込みの 'DomDocument'や' SimpleXML'ではないのですか?... – ircmaxell

+0

[SimpleHTMLDom](http://simplehtmldom.sourceforge.net/)のように見えます。 – drudge

答えて

2

アップデート:今OPの更新のサンプルコードで動作するはずです。

これは、あなたが軌道に乗る必要があります。

テーブル-array.php

<?php 
    // SimpleHTMLDom Library 
    require_once('lib/simple_html_dom.php'); 

    // Source Data 
    $source = 'table-array-data.htm'; 

    // Displays Extra Debug Info 
    $dbg = 1; 

    // Read DOM 
    $html = file_get_html($source); 

    // Confirm DOM 
    if ($html) { 
     // Debug Output 
     if ($dbg) { echo '<pre>'; } 

     // Loop for each <table> 
     foreach ($html->find('table') as $table) { 

      // Debug Output 
      if ($dbg) { echo 'TABLE' . PHP_EOL; } 

      // Loop for each <tr> 
      foreach ($table->find('tr') as $row) { 

       // Debug Output 
       if ($dbg) { echo ' ROW' . PHP_EOL; } 

       // Loop for each <th> 
       foreach ($row->find('th') as $cell) { 

        // Look for <a> tag 
        $link = $cell->find('a'); 

        // Found a link 
        if (count($link) == 1) { 

         // Debug Output 
         if ($dbg) { echo '  LINK: ' . $link[0]->innertext . ' (' . $link[0]->href . ')' . PHP_EOL; } 
        } 

       } 

       // Loop for each <td> 
       foreach ($row->find('td') as $cell) { 

        // Debug Output 
        if ($dbg) { echo '  CELL: ' . $cell->innertext . PHP_EOL; } 
       } 
      } 
     } 
     // Debug Output 
     if ($dbg) { echo '</pre>'; } 
    } 
?> 

table_array_data.htm

<table> 
    <tr class="first"> 
     <th class="school first"><a href="/local/team/home.aspx?schoolid=472d8593-9099-4925-81e0-ae97cae44e43&amp">Aberdeen</a></th> 
     <td class="mascot">Bulldogs</td> 
     <td class="city">Aberdeen</td> 
     <td class="state last">MS</td> 
    </tr> 
</table> 

出力

TABLE 
    ROW 
     LINK: Aberdeen (/local/team/home.aspx?schoolid=472d8593-9099-4925-81e0-ae97cae44e43&) 
     CELL: Bulldogs 
     CELL: Aberdeen 
     CELL: MS 
+0

注:これは、情報を検索し、私は、配列にそれを格納するためのものを追加していません。 – drudge

+0

ありがとうございました!私は配列の部分を得ることができます、私はちょうど各行を分解することができませんでした。今、違いを見るために両方を見て、何が起こっているのか把握することができます。再度、感謝します。 – Michael

+0

元のコードは 'row'レベルにのみ移動しました。私が追加したもののほとんどは、単に '' て解析している - > ''と ''​​要素とその値を抽出します。 – drudge

関連する問題