21,887
社区成员
发帖
与我相关
我的任务
分享
#多维数组合并#
$arrAb = array(
'a1' => array('c1' => 'ABC', 'c4' => 55),
'a3' => 42,
'a7' => array('c3' => 'AAA'),
'a9' => array('c8' => 57, 'c9' => array('d1' => 68, 'd3' => 'DAC'))
);
$arrAc = array(
'a1' => array('c2' => 'ACC', 'c4' => 59),
'a3' => array('c1' => 23),
'a7' => array('c3' => 'AAA', 'c6' => 89),
'a9' => array('c8' => 'BAC', 'c9' => array('d2' => 'DBC', 'd3' => 99))
);
#递归合并多维数组#
function Merge($arr1 = array(), $arr2 = array())
{
$res = array();
if (is_array($arr1) && is_array($arr2)) {
foreach ($arr1 as $m => $val) {
if (is_array($val)) {
if (isset($arr2[$m]) && is_array($arr2[$m])) {
$res[$m] = array_merge($val, $arr2[$m]);
ksort($res[$m]);
} else if ((isset($arr2[$m]) && !is_array($arr2[$m])) || !isset($arr2[$m])) {
$res[$m] = $val;
}
} else {
$res[$m] = $arr2[$m];
}
}
} else if (is_array($arr1) && !is_array($arr2)) {
$res = $arr1;
} else if (!is_array($arr1) && is_array($arr2)) {
$res = $arr2;
}
return $res;
}
$arrMergeRes = Merge($arrAb, $arrAc);
echo 'Merge:<pre>';
print_r($arrMergeRes);
echo '</pre>';
$arrAb = array(
'a1' => array('c1' => 'ABC', 'c4' => 55),
'a3' => 42,
'a7' => array('c3' => 'AAA'),
'a9' => array('c8' => 57, 'c9' => array('d1' => 68, 'd3' => 'DAC'))
);
$arrAc = array(
'a1' => array('c2' => 'ACC', 'c4' => 59),
'a3' => array('c1' => 23),
'a7' => array('c3' => 'AAA', 'c6' => 89),
'a9' => array('c8' => 'BAC', 'c9' => array('d2' => 'DBC', 'd3' => 99))
);
print_r(Merge($arrAb, $arrAc));
function Merge($a, $b) {
$n = is_array($a) ? 2 : 0;
$n += is_array($b) ? 1 : 0;
switch($n) {
case 0:
case 1: return $b;
case 2: return $a;
}
$key = array_merge(array_keys($a), array_keys($b));
foreach($key as $k) {
if(isset($a[$k]) && isset($b[$k])) $r[$k] = Merge($a[$k], $b[$k]);
elseif(isset($a[$k])) $r[$k] = $a[$k];
else $r[$k] = $b[$k];
}
return $r;
}
Array
(
[a1] => Array
(
[c1] => ABC
[c4] => 59
[c2] => ACC
)
[a3] => Array
(
[c1] => 23
)
[a7] => Array
(
[c3] => AAA
[c6] => 89
)
[a9] => Array
(
[c8] => BAC
[c9] => Array
(
[d1] => 68
[d3] => 99
[d2] => DBC
)
)
)
$arr1 = array('a1' => 123));
$arr2 = array('a1' => array(546));
$arr = array_merge_recursive($arr1, 'arr2);
//array(123, array(546));
而期待的效果是:
array('a1' => array(546));$arrAb = array(
'a1' => array('c1' => 'ABC', 'c4' => 55),
'a3' => 42,
'a7' => array('c3' => 'AAA'),
'a9' => array('c8' => 57, 'c9' => array('d1' => 68, 'd3' => 'DAC'))
);
$arrAc = array(
'a1' => array('c2' => 'ACC', 'c4' => 59),
'a3' => array('c1' => 23),
'a7' => array('c3' => 'AAA', 'c6' => 89),
'a9' => array('c8' => 'BAC', 'c9' => array('d2' => 'DBC', 'd3' => 99))
);
$r = array_merge_recursive($arrAb, $arrAc);
print_r($r);
Array
(
[a1] => Array
(
[c1] => ABC
[c4] => Array
(
[0] => 55
[1] => 59
)
[c2] => ACC
)
[a3] => Array
(
[0] => 42
[c1] => 23
)
[a7] => Array
(
[c3] => Array
(
[0] => AAA
[1] => AAA
)
[c6] => 89
)
[a9] => Array
(
[c8] => Array
(
[0] => 57
[1] => BAC
)
[c9] => Array
(
[d1] => 68
[d3] => Array
(
[0] => DAC
[1] => 99
)
[d2] => DBC
)
)
)