2011-12-09 14 views
12

-------------- EDYCJA ------------------------Tablica HTML do zestawu php

Więc idę z podejściem DOM. Oto, co mam do tej pory:

<?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 />"; 

     } 

    } 
?> 

Problem, który mam jest to, że chcę tylko wybrać td z każdego wiersza tabeli. Próbuję to osiągnąć za pomocą zagnieżdżonej pętli. Niestety Drukuje tekst każdego tagu na stronie, ilekroć są znaczniki. jak mogę to uzyskać, więc tylko drukowanie td każdego tr, a nie każdego td na dom?


Potrzebuję używać tabeli html jako źródła moich danych, ponieważ nie mam dostępu do bazy danych. Myślę, że jestem w stanie przesyłać dane z tabeli html Potrzebuję utworzyć funkcję do konwersji tabeli na tablicę lub tablicę wielowymiarową.

Mam podstawową ideę, myślę, ale potrzebuję pomocy w zakończeniu kodu, aby zwrócić tablicę opartą na tabeli html.

Także jeśli masz lepszy sposób robi to inna niż konwersja tabelę do tablicy to proszę dać mi znać

Oto pomysł miałem do tej pory:

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

Najlepszym sposobem byłoby użyć parsera DOM, na przykład http://php.net/manual/en/book.dom.php – jli

+1

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

+0

Czy "data.htm" zawiera tylko tabelę i jej zawartość, czy jest to pełna strona html z wieloma dodatkowymi elementami? W każdym razie twój kod wciąż nie zawiera całej części związanej z parsowaniem elementów tabeli. IMO, szukałbym alternatywnego sposobu: nie podoba mi się pomysł czytania tabeli html. – jap1968

Odpowiedz

19

mam zaktualizowane zmienił go naprawić.

Dla demo na żywo, zobacz 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

perfect..thank you – JDV590

+0

Zgłaszanie funkcji w funkcji jest złym pomysłem. Wywołanie getData(); po raz drugi spowoduje błąd krytyczny 'Błąd krytyczny: Nie można redeclare tdrows()'. –

+0

zepsuty link .... – T30

1

Jednym ze sposobów ułatwi to korzystanie z parsera DOM http://simplehtmldom.sourceforge.net/.

Nadal będziesz musiał wyodrębnić informacje do tablicy, ale to ułatwi iterację po elementach jeden po drugim.