数据:
以下代码生成除整列之外的每一行中的数字总和:
<?php
if(count($json_data["data"]) > 0){ ?>
<?php $_count = 1;
foreach($json_data["data"] as $row){ ?>
<tr>
<td><?php
$str =$row["msg_body"];
preg_match_all("/ksh\s*(\d+\.\d+)/i", $str, $matches);
echo array_sum($matches[1]); ?></td>
</tr>
<?php $_count ++; }
?>
<?php }else{
}
?></td>
如果我理解正确你只需要存储整个总和,然后将其打印出去。就像是:
<?php
if(count($json_data["data"]) > 0){ ?>
<?php $_count = 1;
$totalSum = 0;
foreach($json_data["data"] as $row) { ?>
<tr>
<td><?php
$str =$row["msg_body"];
preg_match_all("/ksh\s*(\d+\.\d+)/i", $str, $matches);
$rowSum = array_sum($matches[1]);
$totalSum += $rowSum;
echo $rowSum;?></td>
</tr>
<?php $_count ++; }
?>
<tr><td>Total sum: <?php echo $totalSum; ?></td></tr>
<?php }else{
}
?></td>
当然,你可以调整你的HTML。
因为我们正在处理数组和preg_match_all,所以我相信你可以内爆数组并执行一个preg_match_all而不是循环它。
$AllItems = implode(" ", $json_data["data"]);
preg_match_all("/ksh\s*(\d+\.\d+)/i", str_replace(",","",$AllItems), $matches);
$total = array_sum($matches[1]);
编辑注意到有逗号为千位分隔符。需要删除正则表达式并求和与str_replace一起使用。