在过去,我已经用以下内容简单地解析了一些事情:
$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语句来可靠地获取每一行的值。
答案 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