2011-12-09 17 views
12

-------------- EDIT ------------------------HTMLテーブルからPHPへの配列

だから私はDOMのアプローチで行くつもりです。ここに私がこれまで持っていたものがあります:

<?php function getdata(){ 
    $contents = file_get_contents('internatdata.htm'); 
    //create a DOM based off of the string from the html table 
    $DOM = new DOMDocument; 
    $DOM->loadHTML($contents); 

    //get all tr and td 
    $items = $DOM->getElementsByTagName('tr'); 
    $tds = $DOM->getElementsByTagName('td'); 

    function tdrows($elements){ 
     $str = ""; 
     for ($ii =0; $ii < $elements->length; $ii++){ 
      $str .= $elements->item($ii)->nodeValue . ","; 


      } 
      return $str; 
     } 

    for ($i = 0; $i < $items->length; $i++){ 


     echo tdrows($tds) . "; <br />"; 

     } 

    } 
?> 

問題は、各テーブル行からtdを選択するだけです。私はネストされたループでこれを達成しようとしています。残念ながら、それはタグがあるので、何度も何度もページ上のすべてのタグのテキストを印刷しています。どのように私はそれを得ることができますので、各trのtdを印刷するだけでなく、DOMのすべてのTDを?


データベースにアクセスできないため、データのソースとしてhtmlテーブルを使用する必要があります。私はテーブルを配列や多次元配列に変換するための関数を作成する必要があるhtmlテーブルからデータを問い合わせることができるようにします。

私は考えている基本的なアイデアがありますが、htmlテーブルに基づいて配列を返すためにコードを完成させる助けが必要です。

<?php 
function getdata(){ 

    $contents = file_get_contents('data.htm'); 
    //add delimiters (semicolon for a row and comma for a cell) ??? 

    $stripped = strip_tags($contents); 

    //explode into an array based off the delimiters above ??? 


    } 
    ?> 
+4

を参照してください例えば、DOMパーサを使用することです最善の方法http://php.net/manual/en/book.dom.php – jli

+1

のhttp: //stackoverflow.com/questions/3627489/php-parse-html-code –

+0

'data.htm'にはテーブルとその内容のみが含まれているのですか、それとももっと多くの要素を含む完全なHTMLページですか?とにかく、あなたのコードには、まだテーブル要素の解析に関連する部分がすべて欠けています。 IMO、私は別の方法を探します:私はhtmlテーブルを読むというアイデアは好きではありません。 – jap1968

答えて

19

私はそれを修正するために、あなたの編集を更新しました。ライブデモのために

http://codepad.viper-7.com/Vu5WdK

function tdrows($elements) 
{ 
    $str = ""; 
    foreach ($elements as $element) { 
     $str .= $element->nodeValue . ", "; 
    } 

    return $str; 
} 

function getdata() 
{ 
    $contents = "<table><tr><td>Row 1 Column 1</td><td>Row 1 Column 2</td></tr><tr><td>Row 2 Column 1</td><td>Row 2 Column 2</td></tr></table>"; 
    $DOM = new DOMDocument; 
    $DOM->loadHTML($contents); 

    $items = $DOM->getElementsByTagName('tr'); 

    foreach ($items as $node) { 
     echo tdrows($node->childNodes) . "<br />"; 
    } 
} 

getdata(); 
+0

完璧です。ありがとうございました – JDV590

+0

関数で関数を宣言するのは悪い考えです。 getData()を呼び出します。 2回目に致命的なエラーが発生します。 '致命的なエラー:tdrows()を再宣言できません。 –

+0

壊れたリンク.... – T30

1

一つの方法に:あなたは配列にテーブルを変換するよりも、この他を行うためのより良い方法を持っている場合は

また、その後、私はここで

は、私がこれまで持っていたアイデアです教えてくださいこれを簡単にするには、DOMパーサ http://simplehtmldom.sourceforge.net/を使用します。

あなたはまだ配列に情報を抽出する必要がありますが、これにより要素を1つずつ繰り返しやすくなります。