在多维数组中添加列的所有给定值的更简单方法是什么?

时间:2013-06-26 23:59:43

标签: php

我觉得必须有一种更简单的方法来处理这个问题;所以我有一个像这样的多维数组:

$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]的方法。有什么想法吗?

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]; });