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