$arr = array(
0 => array('0' => 24505.72, '1' => 6126.43, 4 => 23),
1 => array(0 => 3865.64, 1 => 3265.64, 32 => 23)
);
例如这是一个二维数组,求出里面每个一维数组对应相同地址的和,两个一维数组第一个数相加求和,第二个数相加求和...,如果值不是数字以0代替
是这个意思,每个对应地址求和,如果不是数字或者为空以0代替
$arr = array(
0 => array('0' => 24505.72, '1' => 6126.43, 4 => 23),
1 => array(0 => 3865.64, 1 => 3265.64, 32 => 23)
);
例如这是一个二维数组,求出里面每个一维数组对应相同地址的和,两个一维数组第一个数相加求和,第二个数相加求和...,如果值不是数字以0代替
是这个意思,每个对应地址求和,如果不是数字或者为空以0代替
以样例而言:如果你的要求是要求出:$arr0+$arr1 , $arr0+$arr1 ,$arr0 ,$arr1 要求数组里下标一样的值累加,那么实际应该先把整个二维数组重新反向索引一下:
$arr_sum=array(); $arr_idx=array();
foreach($arr as $arr_1D){
foreach($arr_1D as $k=>$v){
$key='i_'.trim($k); //用来索引原键值,不建议直接用数字值
$val=is_numeric($v)?$v:($v*1);
if(!isset($arr_sum[$key])){
$arr_sum[$key]=$val;
$arr_idx[$key]=array($v);
}else{
$arr_sum[$key]+=$val;
$arr_idx[$key][]=$v;
}
}
}
print_r($arr_sum); //输出的是原$arr各个键对应的数字和
print_r($arr_idx); //输出的是原$arr各个键对应的数组元素
$arr = array(
array('0' => 24505.72, '1' => 6126.43, 4 => 23),
array(0 => 3865.64, 1 => 3265.64, 32 => 23, 'hy' => 11)
);
$arr = array_map(function ($row) {
return array_values($row);
}, $arr);
$result = array_map(function (...$rows) {
foreach ($rows as $key => $val) {
if (is_numeric($val) === false) {
unset($rows[$key]);
} else {
$rows[$key] = floatval($val);
}
}
return round(array_sum($rows), 2);
}, ...$arr);
print_r($result);
1 回答4.1k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答2.3k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答2.2k 阅读
1 回答634 阅读✓ 已解决
803 阅读
不知道这个是不是你期望的结果