簡體   English   中英

PHP:如何使用另一個數組中的值覆蓋一個數組中的值而不向數組添加新鍵?

[英]PHP: How to overwrite values in one array with values from another without adding new keys to the array?

我有一個默認設置的數組,以及一個具有用戶指定設置的數組。 我想合並這兩個數組,以便用用戶指定的數組覆蓋默認設置。

我曾嘗試使用array_merge ,它可以像我想的那樣進行覆蓋,但如果用戶指定了默認設置中不存在的設置,它還會添加新設置。 有沒有比array_merge更好的功能呢? 或者是否有一個函數可用於過濾用戶指定的數組,以便它只包含默認設置數組中也存在的鍵?

我想要的例子

$default = array('a' => 1, 'b' => 2);
$user = array('b' => 3, 'c' => 4);

// Somehow merge $user into $default so we end up with this:
Array
(
    [a] => 1
    [b] => 3
)

實際上你可以只添加兩個數組( $user+$default )而不是使用array_merge

如果要停止默認設置中不存在的任何用戶設置,可以使用array_intersect_key

返回一個關聯數組,其中包含array1的所有條目,這些條目具有所有參數中都存在的鍵

例:

$default = array('a' => 1, 'b' => 2);
$user = array('b' => 3, 'c' => 4);

// add any settings from $default to $user, then select only the keys in both arrays
$settings = array_intersect_key($user + $default, $default);

print_r($settings);

結果:

Array
(
    [b] => 3
    [a] => 1
)

鍵/值(和順序)從第一選擇$user在加法,這就是為什么b到來之前a陣列中,沒有a$user $user 定義的任何未在$default 定義的鍵將被添加到$user的末尾。 然后刪除$user + $default中未在$default定義的任何鍵。

如果你只想考慮那些,那么在default-settings數組中循環鍵可能是最簡單的。 所以你可以這樣做:

foreach ($default_settings AS $key => $default_value)
{
    if (array_key_exists($key, $user_settings))
    {
        $combined_settings[$key] = $user_settings[$key];
    }
    else
    {
        $combined_settings[$key] = $default_value;
    }
}
foreach($default as $key=>$val){   
  if (isset($user[$key]))
  {
    $settings[$key] = $user[$key];
  } else {
    $settings[$key] = $default[$key];
  } 
}

我想這就是你想要的。

foreach($user_settings as $key=>$val){   
    $global_settings[$key] = $val; 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM