如何将关联数组与多个键合并。
下面有两个数组: -
Array1 = Array
(
[294] => Array
(
[2017] => Array
(
[6] => Underperforming
)
)
[236] => Array
(
[2017] => Array
(
[6] => High
)
)
);
Array2 = Array
(
[294] => Array
(
[2017] => Array
(
[5] => Steady
)
)
[236] => Array
(
[2017] => Array
(
[5] => Low
)
)
);
我希望这些数组在PHP中合并,需要输出如下所示, 期待输出数组:
Array (
[294] => Array
(
[2017] => Array
(
[6] => Underperforming
[5] => Steady
)
)
[236] => Array
(
[2017] => Array
(
[6] => High
[5] => Low
)
)
);
数组键不会更改,只会更改值。两个数组都具有相同的数组结构。
答案 0 :(得分:1)
你可以这样做: -
$final_array = array();
foreach($Array1 as $key=>$val){
if(is_array($val) && is_array($Array2[$key])){
if(array_keys($val)[0] == array_keys($Array2[$key])[0]){
$final_array[$key][array_keys($val)[0]] = $Array1[$key][array_keys($Array1[$key])[0]]+$Array2[$key][array_keys($Array2[$key])[0]];
}
}
}
print_r($final_array);
输出: - https://eval.in/834913
更好的方法: -
$final_array = array();
if(count($Array1) >= count($Array2)){
foreach($Array1 as $key=>$val){
if(is_array($val) && is_array($Array2[$key])){
$final_array[$key][array_keys($val)[0]] = $Array1[$key][array_keys($Array1[$key])[0]]+$Array2[$key][array_keys($Array2[$key])[0]];
}else{
$final_array[$key] = $val;
}
}
}
if(count($Array1) < count($Array2)){
foreach($Array2 as $key=>$val){
if(is_array($val) && is_array($Array1[$key])){
$final_array[$key][array_keys($val)[0]] = $Array1[$key][array_keys($Array1[$key])[0]]+$Array2[$key][array_keys($Array2[$key])[0]];
}else{
$final_array[$key] = $val;
}
}
}
print_r($final_array);
输出: - https://eval.in/835143
答案 1 :(得分:0)
对于递归合并,php有array_merge_recursive()函数,但它在你的情况下不起作用(因为你有数字键)。 所以需要这样的自定义函数(单独比较所有元素):
function multidimensionalMerge(array $mainArray, array $secondArray)
{
foreach ($secondArray as $k => $v) {
if (!empty($mainArray[$k])) {
if (is_array($mainArray[$k]) && is_array($v))
$mainArray[$k] = multidimensionalMerge($mainArray[$k], $v);
else
$mainArray[$k] = $v;
} else
$mainArray[$k] = $v;
}
return $mainArray;
}
$array3 = multidimensionalMerge($array1, $array2);