2015-01-14 5 views
-1

데이터베이스에 테이블을 삽입하려고하는데 한 배열의 두 행을 변환하려고합니다. 누구든지 나를 도울 수 있습니까?간단한 HTML DOM 파서 - 하나의 두 행

<table> 
<tr class="pair"><td>1</td><td>2</td></tr> 
<tr class="pair">td<>3</td><td>4</td></tr> 
<tr class="unpair"><td>1</td><>2</td></tr> 
<tr class="unpair"><td>3</td><td>4</td></tr> 
</table> 

<?php 
require('simple_html_dom.php'); 
foreach($table->find('tr[class=pair') as $rowpair) { 
$rowData = array(); 
foreach($rowpair->find('td') as $cell) { 
$rowData[] = $cell->innertext; 
} 
foreach($table->find('tr[class=unpair') as $rowunpair) { 
$rowData = array(); 
foreach($rowunpair->find('td') as $cell) { 
$rowData[] = $cell->innertext; 
} 
?> 

<table> 
<tr class="pair"><td>1</td><td>2</td><td>3</td><td>4</td></tr> 
<tr class="unpair"><td>1</td><td>2</td><td>3</td><td>4</td></tr> 
</table> 
+0

질문이 명확하지 않다; 해당 코드의 들여 쓰기가 존재하지 않습니다. 어떤 루프가 다른 루프에 있는지 여부를 어떻게 알 수 있습니까? 답변 : 할 수 없으므로 고칠 수 있습니다. – developerwjk

답변

0

이이 클래스에 의해 그룹에 모든 테이블 행을 작동해야 얻을 수있다.

기본 논리는 테이블의 모든 행을 반복하고 이전에 해당 클래스가 표시되었는지 확인하는 것입니다. 그렇지 않은 경우에는 해당 행에 대한 참조를 사용할 '표준'행으로 저장합니다. 이전에 수업을 본 적이 있다면, 모든 학생들을 정규 수업으로 이전 할 것입니다.

이 접근 방식은 블로그의 모든 테이블 수와 클래스 이름 집합에 대해 작동해야합니다.

<?php 

    $str = '<table><tr class="pair"><td>1</td><td>2</td></tr><tr class="pair"><td>3</td><td>4</td></tr><tr class="unpair"><td>1</td><td>2</td></tr><tr class="unpair"><td>3</td><td>4</td></tr> 
    </table>'; 


    $doc = new DOMDocument(); 
    $doc->loadHTML($str); 


    $tables = $doc->getElementsByTagName('table'); 
    foreach ($tables as $table) { 

     #For each TR in the table, group into rows 
     $table_classes = array(); 
     $rows = $table->getElementsByTagName('tr'); 


     $row_list = array(); 
     foreach ($rows as $row) { 
      array_push($row_list, $row); 
     } 

     for($i=0; $i<count($row_list); $i++){ 

      $row = $row_list[$i]; 
      $row_class = $row->getAttribute('class'); 

      if(!array_key_exists($row_class, $table_classes)){ 

       #if this is the for occurrence of that clase, store this row as the original_row 
       $table_classes[$row_class] = $row; 

      }else{ 

       $original_row = $table_classes[$row_class]; 

       #Move children over to original row 
       foreach ($row->childNodes as $child) { 

        $clone = $child->cloneNode(true); 
        $original_row->appendChild($clone); 
       } 

       #Now delete original 
       $row->parentNode->removeChild($row); 


      } 
     } 

    } 


    echo htmlspecialchars($doc->saveXML()); 

?> 

결과 :

<table> 
    <tr class="pair"> 
     <td>1</td> 

     <td>2</td> 

     <td>3</td> 

     <td>4</td> 
    </tr> 

    <tr class="unpair"> 
     <td>1</td> 

     <td>2</td> 

     <td>3</td> 

     <td>4</td> 
    </tr> 
</table>