0

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

$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. 现在我正在使用 a 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]'s 相加的方法。有任何想法吗?

4

1 回答 1

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]; });
于 2013-06-27T00:03:11.080 回答