按索引值对php多维数组求和

按索引值对php多维数组求和,php,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 ($subA

我有一个这样的数组

$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,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行的未定义偏移量:3 in/opt/lampp/htdocs/chart/1.php

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

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


如何消除此未定义的偏移错误?

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

由于正在执行
$sumArray[$key]+=$value
,因此需要初始化
0
,如果未设置
$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

文档:

您必须检查
$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

Doc:

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

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

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

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

您可以使用
array\u sum()
一次添加每一列(使用
array\u column()
提取要添加的值),而不是一次循环添加一个项


您可以使用
array\u sum()
一次添加每一列(使用
array\u column()
提取要添加的值),而不是一次循环添加一个项


不能向未定义的变量添加内容<代码>$sumArray[$key]必须定义。因此,如何定义$sumArray[$key]。不能向未定义的变量添加内容<代码>$sumArray[$key]必须定义。因此如何定义$sumArray[$key]。在您的回答中值得一提的是,这是因为您使用的是
+=
,需要初始化位置才能正常工作。我还有一个问题@Eddie。若有n个索引,并且对于每个索引,数组中有n个项。这将是正确的总结方法。@JaiSharma我不明白:)在您的回答中值得一提的是,这是因为您使用的是
+=
,这需要对位置进行初始化才能正常工作。我还有一个问题@Eddie。若有n个索引,并且对于每个索引,数组中有n个项。这将是正确的求和方法。@JaiSharma我不明白:)您可以使用输入数组的大小来创建它,这样更灵活。好的。我查一下。谢谢,您可以使用输入数组的大小来创建它,以便更灵活。好的。我查一下。谢谢。让我试试。谢谢,好的。让我试试。非常感谢。