2
确定我有这个功能(我为这个问题的答案question),其合并的数组,像这样:PHP:问题合并阵列
功能
function readArray($arr, $k, $default = 0) {
return isset($arr[$k]) ? $arr[$k] : $default ;
}
function merge($arr1, $arr2) {
$result = array() ;
foreach($arr1 as $k => $v) {
if(is_numeric($v)) {
$result[$k] = (int)$v + (int) readArray($arr2, $k) ;
} else {
$result[$k] = merge($v, readArray($arr2, $k, array())) ;
}
}
return $result ;
}
使用
$basketA = array("fruit" => array(), "drink" => array()) ;
$basketA['fruit']['apple'] = 1;
$basketA['fruit']['orange'] = 2;
$basketA['fruit']['banana'] = 3;
$basketA['drink']['soda'] = 4;
$basketA['drink']['milk'] = 5;
$basketB = array("fruit" => array(), "drink" => array()) ;
$basketB['fruit']['apple'] = 2;
$basketB['fruit']['orange'] = 2;
$basketB['fruit']['banana'] = 2;
$basketB['drink']['soda'] = 2;
$basketB['drink']['milk'] = 2;
$basketC = merge($basketA, $basketB) ;
print_r($basketC) ;
输出
Array
(
[fruit] => Array
(
[apple] => 3
[orange] => 4
[banana] => 5
)
[drink] => Array
(
[soda] => 6
[milk] => 7
)
)
确定这一点也适用1个缺陷我无法弄清楚如何解决: 如果$ ARR1是缺少的东西是$ ARR2有,也应该只使用从$ ARR2价值,而是忽略了一起:
例
$basketA = array("fruit" => array(), "drink" => array()) ;
$basketA['fruit']['apple'] = 1;
$basketA['fruit']['orange'] = 2;
$basketA['fruit']['banana'] = 3;
$basketA['drink']['milk'] = 5;
$basketB = array("fruit" => array(), "drink" => array()) ;
$basketB['fruit']['apple'] = 2;
$basketB['fruit']['orange'] = 2;
$basketB['fruit']['banana'] = 2;
$basketB['drink']['soda'] = 2;
$basketB['drink']['milk'] = 2;
$basketC = merge($basketA, $basketB) ;
print_r($basketC) ;
输出
Array
(
[fruit] => Array
(
[apple] => 3
[orange] => 4
[banana] => 5
)
[drink] => Array
(
[milk] => 7
)
)
通知如何[苏打]不是新的数组中,因为第一阵列没有它。
我该如何解决这个问题?
谢谢!
虽然我很惊讶,但看起来这个代码我会认为它合并了两次,使得值加倍,但我测试了它,它的工作原理应该如此。谢谢!! – 2010-01-22 19:17:58
@John Isaacks:没问题,看我的更新... – 2010-01-22 19:20:27