Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将多维数组中列的所有给定值相加的更简单方法?_Php - Fatal编程技术网

Php 将多维数组中列的所有给定值相加的更简单方法?

Php 将多维数组中列的所有给定值相加的更简单方法?,php,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 On

我觉得必须有一个更简单的方法来处理这个问题;我有一个多维数组,如下所示:

$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)
);
我想显示
数组
第二列(第一列,但你知道我的意思)总值的百分比。现在我正在使用一个
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>
foreach($reports as$report){
$total_val+=(int)$report[1];
}
foreach($reports作为$report报告){
$name=$report[0];
$val=(int)$report[1];
?>

我觉得必须有一种更好的方法来处理这个问题,以便在不重新循环
数组的情况下获取变量
$total\u val=6;
。一种将所有
$report[1]
相加的方法。有什么想法吗?

如果运行PHP5.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);


如果您运行PHP5.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);


@Barmar:还补充了:-)谢谢您,先生;不幸的是,这个服务器不是最新的,由于匿名函数的支持不足,我不断收到
意外的T_函数
错误;但是经过一些调整,我使用了
数组_-reduce
。我会记下所有这些,再次感谢您的回答。@Barmar:还补充了:-)谢谢你,先生;不幸的是,这台服务器不是最新的,由于匿名函数的支持不足,我不断收到
意外的T_函数
错误;但是经过一些调整,我使用了
数组_reduce
。我会记下所有这些,再次感谢你的回答。作为一名将军所有评论,像这样的子数组让我感到不安。对于非统一数据,你应该使用关联数组,例如
array('type'=>'Complete Installation','value'=>1)
。作为一般评论,这样的子数组让我感到不安。对于非统一数据,你应该使用关联数组,例如
array('type'=>'Complete Installation','value'=>1)