我觉得必须有一种更简单的方法来处理这个问题;所以我有一个像这样的多维数组:
$reports = array(
array("Complete Installation", 1),
array("Register + OSR Install", 0),
array("OSR + Wire", 0),
array("OSR Only", 1),
array("Ground Strap Installation", 2),
array("Meter Only", 2)
);
我想在Array
的第二列(嗯,首先,但你知道我的意思)栏中显示一个百分比。现在我正在使用foreach
,但它看起来真的多余而且效率不高:
foreach($reports as $report) {
$total_val += (int)$report[1];
}
foreach($reports as $report) {
$name = $report[0];
$val = (int)$report[1];
?>
<tr>
<td><?=(stripslashes($name));?></td>
<td><?=($val);?></td>
<td><?=(($val > 0) ? round(($val / $total_val) * 100, 2) : $val);?></td>
</tr>
我觉得必须有更好的方法来处理它,以便在不重新循环$total_val = 6;
的情况下获取变量Array
。一种添加所有$report[1]
的方法。有什么想法吗?
答案 0 :(得分:5)
如果你运行PHP 5.5,那很容易:
$total = array_sum(array_column($reports, 1));
如果你不这样做,那么foreach
(它没有任何问题 - 相反,简单就是好的)或某些花哨的选择:
// If you go fancy this should be your choice, the others are slightly inferior
$total = array_reduce($reports, function($sum, $r) { return $sum + $r[1]; }, 0);
或
$total = array_sum(array_map(function($r) { return $r[1]; }, $reports);
或
$total = 0;
array_walk($reports, function($r) use (&$total) { $total += $r[1]; });