可以說你有一個用戶提供的信息。用「Input」數組合並「Defaults」數組? PHP哪些功能?
Array 1
但並非全部都是必需的。所以你有默認。
Array 2
確實PHP有,如果他們在Array 1
提供的,而不是空的,將覆蓋的基礎上Array 2
所有數組值的函數嗎?
可以說你有一個用戶提供的信息。用「Input」數組合並「Defaults」數組? PHP哪些功能?
Array 1
但並非全部都是必需的。所以你有默認。
Array 2
確實PHP有,如果他們在Array 1
提供的,而不是空的,將覆蓋的基礎上Array 2
所有數組值的函數嗎?
我不確定這些答案中的任何一個是否幫助你(他們並沒有幫助我),特別是當你的「虛假」可能是一個以上級別的關聯數組時。
我認爲你要找的是array_replace_recursive
。
$finalArray = array_replace_recursive(array $defaults, array $inputOptions)
繼承人是需要的選項可選的陣列功能,並不會根據這些選項中的「opts
」和defaults
結果一些處理您指定一個例子:
function do_something() {
$args = func_get_args();
$opts = $args[0] ? $args[0] : array();
$defaults = array(
"second_level" => array(
"key1" => "val1",
"key2" => "val2"
),
"key1" => "val1",
"key2" => "val2",
"key3" => "val3"
);
$params = array_replace_recursive($defaults, $opts);
// do something with these merged parameters
}
檢查它出here
你可以做類似
foreach($array1 as $key=>$value) $array2[$key]=$value;
因爲這在大多數情況下都能正常工作,所以它直接覆蓋'$ array2',在這種情況下,它是「defaults」數組。這可能是也可能不是預期的行爲。 – 2017-02-01 23:00:05
array_merge()是你在尋找什麼。
這是錯的,array_merge會在非默認數組中添加任何鍵,並且最終可能會導致鍵在默認數組中不可用 – 2016-02-04 16:09:00
@RiccardoGalli默認數組中不可用的鍵不會被使用,我不認爲這是問題。 – 2017-02-01 21:47:22
這意味着更多的一維數組,或者當使用提供的值完全重寫數組類默認值是預期的行爲時。旁註:在PHP 5.6中表現的性能比「foreach」更快,在PHP 7中幾乎沒有差異。 – 2017-02-01 21:48:13
$defaults = array(
'some_key_1'=>'default_value_1',
'some_key_2'=>'default_value_2',
);
$inputs = array_merge($defaults, $inputs)
這幾乎沒有增加任何新的見解現有的答案 – cfrick 2014-12-09 11:49:25
我明白,你可以複製和粘貼使用此 – 2015-06-01 12:01:24
如果$ inputs數組包含不在$ defaults數組中的鍵,它們將被添加到結果中,這是錯誤的。 – 2016-02-04 16:10:01
如果你只是想保持您所期望的選項,並丟棄其餘的你可以使用的012組合和array_intersect_key
。
<?php
function foo($options) {
$defaults = [
'a' => 1,
'b' => null,
];
$mergedParams = array_merge(
$defaults,
array_intersect_key($options, $defaults)
);
return $mergedParams;
}
var_dump(foo([
'a' => 'keep me',
'c' => 'discard me'
]));
// => output
//
// array(2) {
// ["a"]=>
// string(7) "keep me"
// ["b"]=>
// NULL
// }
如果你想保留任何額外的密鑰,然後array_merge($defaults, $options)
將會做得很好。
是的,這個答案是我喜歡的:)另外我喜歡你添加的註釋,只有當你想刪除額外的鍵時纔有這個:) PS:我已經添加了文檔的鏈接;) – 2017-02-03 12:54:37
這將是偉大的! TY – Orangeman555 2013-12-18 06:47:37