【问题标题】:PHPQuery- Select table columns into an arrayPHPQuery-将表列选择为数组
【发布时间】:2015-07-11 06:38:30
【问题描述】:

我有一个像这样的表格的 HTML 文件:

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

我需要根据类 ID 将每个 &lt;td&gt; 放入一个单独的数组元素中。

我正在使用 PHPQuery。我试过了

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

但它所做的是将所有列作为单个字符串。所以$columns[0] 打印出所有列,而$columns[1] 为空白。

如何将单个 &lt;td&gt; 作为数组中的单个元素?

【问题讨论】:

标签: php phpquery


【解决方案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);

【讨论】:

  • 谢谢,但我真的需要使用 PHPQuery 来完成这项任务!
  • $rows = pq('ul.im-the-list &gt; li'); 在代码中做了什么?
  • 那是我忘记删除的剩余部分,您会看到$rows 变量从未使用过,我将其编辑掉
猜你喜欢
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
  • 1970-01-01
相关资源
最近更新 更多