合并,总结在PHP 2多维数组 [英] Merge and sum two multidimensional arrays in PHP
本文介绍了合并,总结在PHP 2多维数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要一种方法来合并多个阵列(大概在8)和总结的重复键或子键。
例如:
$ ARR1 =阵列(
星期五=>阵列(
早餐=> 32,
午餐=> 45
)
星期日=>阵列(
午餐=> 12
)
);$ ARR2 =阵列(
星期日=>阵列(
早餐=> 7,
午餐=> 3
)
星期一=>阵列(
早餐=> 12
)
);$ ARR3 =阵列(
星期一=>阵列(
早餐=> 31
)
);
和输出应该是这样的:
$ =总阵列(
星期五=>阵列(
早餐=> 32,
午餐=> 45
)
星期日=>阵列(
早餐=> 19,
午餐=> 15
)
星期一=>阵列(
早餐=> 43
)
);
我怎么能结合吗?我试过用
array_map()
但是,这似乎失败,多维数组这样。使用也试过
forEach()这样
但得到了pretty费解。
下面是我的尝试:
$ =总array_map(函数($ ARR1,$ ARR2,$ ARR3){
回报($ ARR1 + $ ARR2 + $ ARR3);
} $ ARR1,$ ARR2,$ ARR3);
解决方案
尝试这种解决方案。您可以添加阵列中的任何计数。但请名称作为$ arr1- $ maxArraysCount
$ ARR1 =阵列(
星期五=>阵列(
早餐=> 32,
午餐=> 45
)
星期日=>阵列(
午餐=> 12
)
);$ ARR2 =阵列(
星期日=>阵列(
早餐=> 7,
午餐=> 3
)
星期一=>阵列(
早餐=> 12
)
);$ ARR3 =阵列(
星期一=>阵列(
早餐=> 31
)
);
$ maxArraysCount = 8;
$收益率=阵列();
为($ i = 1; $ I< $ maxArraysCount; $ I ++){
$常用3 ='改编'。 $ I;
如果(使用isset(ARR $$)及和放大器; is_array($$ ARR)){
的foreach(ARR $$作为$天=> $值){
的foreach($值$吃=> $计数){
如果(使用isset($返回[$日] [$吃])!)$返回[$日] [$吃] = 0;
$返回[$日] [$吃] = $计数+ $返回[$日] [$吃];
}
}
}
}回声< pre>中;的print_r($返程);
下面是输出:
阵列
(
[周五] =>排列
(
[早餐] => 32
[午餐] => 45
) [日] =>排列
(
[午餐] => 15
[早餐] => 7
) [周一] =>排列
(
[早餐] => 43
))
I'm needing a way to merge several arrays ( probably around 8 ) and sum any duplicate keys or sub-keys.
For example:
$arr1 = array(
"Friday" => array(
"Breakfast" => 32,
"Lunch" => 45
),
"Sunday" => array(
"Lunch" => 12
)
);
$arr2 = array(
"Sunday" => array(
"Breakfast" => 7,
"Lunch" => 3
),
"Monday" => array(
"Breakfast" => 12
)
);
$arr3 = array(
"Monday" => array(
"Breakfast" => 31
)
);
And the output should be something like this:
$total = array(
"Friday" => array(
"Breakfast" => 32,
"Lunch" => 45
),
"Sunday" => array(
"Breakfast" => 19,
"Lunch" => 15
),
"Monday" => array(
"Breakfast" => 43
)
);
How could I combine this? I've tried using
array_map()
But that seemed to fail with multidimensional arrays like this. Also tried using
Foreach()
but that got pretty convoluted.
Here's my attempt:
$total = array_map( function( $arr1, $arr2, $arr3 ){
return( $arr1 + $arr2 + $arr3 );
}, $arr1, $arr2, $arr3 );
解决方案
Try this solution. You can add any count of arrays. But keep names as $arr1-$maxArraysCount
$arr1 = array(
"Friday" => array(
"Breakfast" => 32,
"Lunch" => 45
),
"Sunday" => array(
"Lunch" => 12
)
);
$arr2 = array(
"Sunday" => array(
"Breakfast" => 7,
"Lunch" => 3
),
"Monday" => array(
"Breakfast" => 12
)
);
$arr3 = array(
"Monday" => array(
"Breakfast" => 31
)
);
$maxArraysCount = 8;
$return = array();
for($i = 1; $i < $maxArraysCount; $i++){
$arr = 'arr' . $i;
if(isset($$arr) && is_array($$arr)){
foreach ($$arr as $day => $value) {
foreach ($value as $eat => $count) {
if(!isset($return[$day][$eat])) $return[$day][$eat] = 0;
$return[$day][$eat] = $count + $return[$day][$eat];
}
}
}
}
echo "<pre>";print_r($return);
Here is output:
Array
(
[Friday] => Array
(
[Breakfast] => 32
[Lunch] => 45
)
[Sunday] => Array
(
[Lunch] => 15
[Breakfast] => 7
)
[Monday] => Array
(
[Breakfast] => 43
)
)
这篇关于合并,总结在PHP 2多维数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文