我有一个像这样的数组。
$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
如何摆脱这种不确定的偏移误差?
答案 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);