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

时间:2014-04-17 06:23:53

标签: php domdocument

在过去,我已经用以下内容简单地解析了一些事情:

$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 :(得分: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;
}

答案 1 :(得分: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