2011-12-09 6 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의를 선택하려는 것입니다 : 여기에 지금까지 가지고있는 것입니다. 중첩 된 루프를 사용하여이 작업을 수행하려고합니다. 불행히도 그것은 태그가있는만큼 페이지에있는 모든 태그의 텍스트를 몇 번이나 인쇄하고 있습니다. 어떻게하면 각 인쇄기의 td 만 인쇄하고 모든 인쇄기의 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

이 가장 좋은 방법은 http://php.net/manual/en/book.dom.php – jli

+1

HTTP 예를 들어, DOM 파서를 사용하는 것입니다 참조 //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() 호출; 두 번째로 치명적인 오류가 발생합니다. 치명적인 오류 : tdrows()를 재 선언 할 수 없습니다. –

+0

깨진 링크 .... – T30

1

한 가지 방법에 : 당신이 배열에 테이블을 변환보다이 다른 일을 더 좋은 방법이 있다면

또한 다음 날 여기

내가 지금까지했던 생각이다 알려 주시기 바랍니다 이 작업을 더 쉽게하려면 dom 파서 http://simplehtmldom.sourceforge.net/을 사용하십시오.

정보를 배열로 추출해야하지만, 요소별로 하나씩 반복하는 것이 더 쉬워집니다.