首页 文章

解析并计算变量行表中列的总和

提问于
浏览
0

在过去,我用以下内容简单地解析了一些东西:

$dom=new DOMDocument();
$dom->loadHTML(file_get_contents('http://...'));
$tables=$dom->getElementsByTagName('table');
$trs=$tables->item(0)->getElementsByTagName('tr');
$tds=$trs->item(0)->getElementsByTagName('td');
$json=array(
    "item1"=>$tds->item(0)->textContent,
    "item2"=>$tds->item(1)->textContent,
    "item2"=>$tds->item(2)->textContent,
    "item2"=>$tds->item(3)->textContent,
);

但是,我需要解析一些事情,以便我可以将它们的值一起添加并获得存储在数组中的总和 .

澄清一下:假设有一个页面有一个表格 . 这个表中的行数会有所不同,但是在其中一个列中,有一些我想要一起添加的整数,因此这个特定列的所有行的总和都存储在我的数组中,但第一行,因为它包含列名 .

在这个阶段,我所知道的是我应该使用foreach语句来可靠地获取每一行的值 .

2 回答

  • 0

    XPath提供了一个 sum 函数,在这里有用:

    <?php
    
    $html = '<table>
      <tr><td>heading</td><td>heading</td></tr>
      <tr><td>1</td><td>2</td></tr>
      <tr><td>4</td><td>8</td></tr>
    </table>';
    
    $doc = new DOMDocument;
    $doc->loadHTML($html);
    
    $xpath = new DOMXPath($doc);
    
    // sum of cells in the second column, skipping the first row
    print $xpath->evaluate('sum(//table//tr[position() > 1]/td[2])');
    
    // output: 10
    
  • 0

    由于您必须跳过列表的第一个元素,因此 for 循环可能更好 . 下面的代码总计行中的第一列 .

    $total = 0;
    $trs=$tables->item(0)->getElementsByTagName('tr');
    for ($rownum = 1; $rownum < $trs->length; $rownum++) {
        $row = $trs->item($rownum);
        $td = $row->getElementsByTagName('td')->item(0);
        $total += $td->textContent;
    }
    

相关问题