2015-10-20 66 views
0

對不起長問題。在這裏我會更清楚我真正想要做的事情。PHP通過提供更小的數組來更新多維數組,覆蓋存在的鍵,但保留其他數據

請考慮這種相對簡單的多維數組

'domain1.com' => 
    array (size=9) 
     'serverip' => null 
     'dedicatedip' => null 
     'username' => null 
     'password' => null 
     'web_template' => null 
     'datacenter' => null 
     'unix_time_start' => null 
     'is_trial' => null 
     'billing' => 
      array (size=2) 
       'upgrade' => boolean false 
       'vip' => boolean true 
'domain2.com' => 
    array (size=9) 
     'serverip' => null 
     'dedicatedip' => null 
     'username' => null 
     'password' => null 
     'web_template' => null 
     'datacenter' => null 
     'unix_time_start' => null 
     'is_trial' => null 
     'billing' => 
      array (size=2) 
       'upgrade' => boolean false 
       'vip' => boolean true 

注意,第一級密鑰是域名,最後價值「結算」也是一個數組。

我可以通過使用array_merge使用這個簡化函數來更新信息的位。

function update_domain_details($domain, $array) { 
    $large = array(...) // as above 
    $current_large = $large[$domain]; 
    $large[$domain] = array_merge($current_large, $array); 
} 

$array = array(
    is_trial => true, 
); 

update_domain_details('domain1.com', $array); 

但我遇到的問題是當我嘗試更新計費子數組中的任何東西。例如;

$array = array(
    'billing' => array('upgrade' => true), 
); 

這將覆蓋整個計費子數組,並且會丟失'vip'值。

我已經看過array_merge_recursive,但它只是讓我有點困惑。

我希望能夠將一個數組和一個域名一起傳遞給一個函數,並且它會將數組覆蓋在較大的數組上,而不會丟失任何信息。任何幫助,將不勝感激。

回答