按索引值求和php多维数组

时间:2018-06-19 12:29:06

标签: php

我有一个像这样的数组。

$dataListArray = array(
   array(0,3,0,0,0,0),
   array(0,0,1,0,0,0),
   array(0,0,0,1,0,0),
   array(0,0,0,0,1,0)
);

此数据列表数组可以具有n个索引,每个索引数组可以具有n个数据。我正在尝试对每个索引的值求和

$sumArray = array();
foreach ($dataListArray as $subArray) {
    foreach ($subArray as $key => $value) {
        $sumArray[$key]+= $value;
    }
}


// convert sum array as list
$dataList = implode(',', $sumArray);

这是求和,因为我希望它的输出是0,3,1,1,1,0

但这也给我通知错误

  

注意:未定义的偏移量:第6行的/opt/lampp/htdocs/chart/1.php中为0

     

注意:未定义的偏移量:第6行的/opt/lampp/htdocs/chart/1.php中的1

     

注意:未定义的偏移量:第6行的/opt/lampp/htdocs/chart/1.php中的2

     

注意:未定义的偏移量:第6行的/opt/lampp/htdocs/chart/1.php中的3

     

注意:未定义的偏移量:第6行的/opt/lampp/htdocs/chart/1.php中的4

     

注意:未定义的偏移量:第6行的/opt/lampp/htdocs/chart/1.php中的5

如何摆脱这种不确定的偏移误差?

3 个答案:

答案 0 :(得分:3)

您必须检查是否通过使用$key设置了isset。如果不是,则分配0。

0需要初始化,因为您正在执行$sumArray[$key] += $value,如果未设置$sumArray[$key],则将$value添加到未定义。

$dataListArray = array(
   array(0,3,0,0,0,0),
   array(0,0,1,0,0,0),
   array(0,0,0,1,0,0),
   array(0,0,0,0,1,0)
);

$sumArray = array();
foreach ($dataListArray as $subArray) {
    foreach ($subArray as $key => $value) {
        if ( !isset( $sumArray[$key] ) ) $sumArray[$key] = 0; //Check if key exist. Assign 0 if not.
        $sumArray[$key]+= $value;
    }
}

$dataList = implode(',', $sumArray);

这将导致:

0,3,1,1,1,0

文档:isset()

答案 1 :(得分:2)

另一种可能的解决方案是在使用$sumArray之前先用零填充。

$sumArray = array_fill(0, count($dataListArray[0]), 0);

答案 2 :(得分:1)

您可以使用array_sum()一次添加每一列(使用array_column()提取要添加的值),而不是一次遍历并一次添加一项。 / p>

$dataListArray = array(
    array(0,3,0,0,0,0),
    array(0,0,1,0,0,0),
    array(0,0,0,1,0,0),
    array(0,0,0,0,1,0)
);

$sumArray = array();
foreach ( $dataListArray[0] as $key=>$entry )   {
    $sumArray[$key] = array_sum(array_column($dataListArray, $key));
}
print_r($sumArray);