2015-07-11 109 views
0

我有一個HTML文件,像這樣的表:PHPQuery-選擇表列到一個數組

<tr valign="top" class="dselbkg" onMouseOver="this.className='selbkg'" onMouseOut="this.className='dselbkg'" > 
    <td height="20" align="center">1</td> 
    <td height="20"><div align="center">16-12-2014</div></td> 
    <td ><div align="center">1ST<br> 
      (10:0 AM - 1:0 PM)</div></td> 
    <td ><div align="center">BE2105 </div></td> 
    <td >PROGRAMMING IN C</td> 
</tr> 

<tr valign="top" class="dselbkg" onMouseOver="this.className='selbkg'" onMouseOut="this.className='dselbkg'" > 
    <td height="20" align="center">2</td> 
    <td height="20"><div align="center">18-12-2014</div></td> 
    <td ><div align="center">1ST<br> 
      (10:0 AM - 1:0 PM)</div></td> 
    <td ><div align="center">BS1101 </div></td> 
    <td >MATHEMATICS - I</td> 
</tr> 

<tr valign="top" class="dselbkg" onMouseOver="this.className='selbkg'" onMouseOut="this.className='dselbkg'" > 
    <td height="20" align="center">3</td> 
    <td height="20"><div align="center">20-12-2014</div></td> 
    <td ><div align="center">1ST<br> 
      (10:0 AM - 1:0 PM)</div></td> 
    <td ><div align="center">HM3101 </div></td> 
    <td >COMMUNICATIVE ENGLISH</td> 
</tr> 

我需要每個<td>進入基於類ID陣列的獨立元件。

我正在使用PHPQuery。我試過

$table = $all['tr.dselbkg']; 
$columns = $table['td']; 

但是它所做的是將所有的列作爲單個字符串。所以$columns[0]打印出所有的列,而$columns[1]是空白的。

如何將個人<td>作爲數組中的單個元素使用?

+0

PHPQuery庫在4年內沒有維護。您可能想要使用更新的替代方法,如DOM-Query(https://github.com/PHPPowertools/DOM-Query)。 –

回答

1

編輯使用PHPQuery:

<?php 

include('phpQuery.php'); 

$htmlString = '<tr valign="top" class="dselbkg" onMouseOver="this.className=\'selbkg\'" onMouseOut="this.className=\'dselbkg\'" > 
    <td height="20" align="center">1</td> 
    <td height="20"><div align="center">16-12-2014</div></td> 
    <td ><div align="center">1ST<br> 
      (10:0 AM - 1:0 PM)</div></td> 
    <td ><div align="center">BE2105 </div></td> 
    <td >PROGRAMMING IN C</td> 
</tr> 

<tr valign="top" class="dselbkg" onMouseOver="this.className=\'selbkg\'" onMouseOut="this.className=\'dselbkg\'" > 
    <td height="20" align="center">2</td> 
    <td height="20"><div align="center">18-12-2014</div></td> 
    <td ><div align="center">1ST<br> 
      (10:0 AM - 1:0 PM)</div></td> 
    <td ><div align="center">BS1101 </div></td> 
    <td >MATHEMATICS - I</td> 
</tr> 

<tr valign="top" class="dselbkg" onMouseOver="this.className=\'selbkg\'" onMouseOut="this.className=\'dselbkg\'" > 
    <td height="20" align="center">3</td> 
    <td height="20"><div align="center">20-12-2014</div></td> 
    <td ><div align="center">1ST<br> 
      (10:0 AM - 1:0 PM)</div></td> 
    <td ><div align="center">HM3101 </div></td> 
    <td >COMMUNICATIVE ENGLISH</td> 
</tr> '; 

$doc = phpQuery::newDocumentHTML($htmlString); 

foreach (pq('tr.dselbkg') as $row){ 
    $columns = array(); 
    foreach(pq('td',$row) as $td) $columns[] = $td->nodeValue; 
    $tableRows[] = $columns; 
} 

print_r($tableRows); 

/* 
Array 
(
    [0] => Array 
     (
      [0] => 1 
      [1] => 16-12-2014 
      [2] => 1ST 
      (10:0 AM - 1:0 PM) 
      [3] => BE2105 
      [4] => PROGRAMMING IN C 
     ) 

    [1] => Array 
     (
      [0] => 2 
      [1] => 18-12-2014 
      [2] => 1ST 
      (10:0 AM - 1:0 PM) 
      [3] => BS1101 
      [4] => MATHEMATICS - I 
     ) 

    [2] => Array 
     (
      [0] => 3 
      [1] => 20-12-2014 
      [2] => 1ST 
      (10:0 AM - 1:0 PM) 
      [3] => HM3101 
      [4] => COMMUNICATIVE ENGLISH 
     ) 

) 

*/ 

您可以輕鬆地使用simple html dom來查詢您的HTML。

下面是如何從解析的td元素構建數組的示例。

<?php 

include('simple_html_dom.php'); 

$htmlString = '<tr valign="top" class="dselbkg" onMouseOver="this.className=\'selbkg\'" onMouseOut="this.className=\'dselbkg\'" > 
    <td height="20" align="center">1</td> 
    <td height="20"><div align="center">16-12-2014</div></td> 
    <td ><div align="center">1ST<br> 
      (10:0 AM - 1:0 PM)</div></td> 
    <td ><div align="center">BE2105 </div></td> 
    <td >PROGRAMMING IN C</td> 
</tr> 

<tr valign="top" class="dselbkg" onMouseOver="this.className=\'selbkg\'" onMouseOut="this.className=\'dselbkg\'" > 
    <td height="20" align="center">2</td> 
    <td height="20"><div align="center">18-12-2014</div></td> 
    <td ><div align="center">1ST<br> 
      (10:0 AM - 1:0 PM)</div></td> 
    <td ><div align="center">BS1101 </div></td> 
    <td >MATHEMATICS - I</td> 
</tr> 

<tr valign="top" class="dselbkg" onMouseOver="this.className=\'selbkg\'" onMouseOut="this.className=\'dselbkg\'" > 
    <td height="20" align="center">3</td> 
    <td height="20"><div align="center">20-12-2014</div></td> 
    <td ><div align="center">1ST<br> 
      (10:0 AM - 1:0 PM)</div></td> 
    <td ><div align="center">HM3101 </div></td> 
    <td >COMMUNICATIVE ENGLISH</td> 
</tr> '; 

$html = str_get_html($htmlString); 

foreach($html->find('tr.dselbkg') as $tr){ 
    $columns = array(); 

    foreach($tr->find('td') as $td) 
     $columns[] = $td->outertext; // outertext if you want the full td tag 
     // $columns[] = $td->innertext // innertext if you just want the text inside the td tag 

    $tablerows[]=$columns; 
} 

print_r($tablerows); 

/* 

Array 
(
    [0] => Array 
     (
      [0] => <td height="20" align="center">1</td> 
      [1] => <td height="20"><div align="center">16-12-2014</div></td> 
      [2] => <td ><div align="center">1ST<br>    (10:0 AM - 1:0       PM)</div></td> 
      [3] => <td ><div align="center">BE2105 </div></td> 
      [4] => <td >PROGRAMMING IN C</td> 
     ) 

    [1] => Array 
     (
      [0] => <td height="20" align="center">2</td> 
      [1] => <td height="20"><div align="center">18-12-2014</div></td> 
      [2] => <td ><div align="center">1ST<br>    (10:0 AM - 1:0       PM)</div></td> 
      [3] => <td ><div align="center">BS1101 </div></td> 
      [4] => <td >MATHEMATICS - I</td> 
     ) 
*/ 

$html->clear(); 
unset($html); 
+0

謝謝,但我真的需要使用PHPQuery的任務! –

+0

好的,我會更新回答 –

+0

'$ rows = pq('ul.im-the-list> li');'在代碼中做什麼? –