あなたはユーザーに情報を提供させていると言います。"Input"配列を持つ "Defaults"配列をマージしますか? PHPはどの機能ですか?
Array 1
ただし、すべてではありません。だからあなたはデフォルトを持っています。
Array 2
んPHPは、それらがArray 1
に供給され、空されていない場合に基づいArray 2
のすべての配列の値を上書きする関数がありますか?
あなたはユーザーに情報を提供させていると言います。"Input"配列を持つ "Defaults"配列をマージしますか? PHPはどの機能ですか?
Array 1
ただし、すべてではありません。だからあなたはデフォルトを持っています。
Array 2
んPHPは、それらがArray 1
に供給され、空されていない場合に基づいArray 2
のすべての配列の値を上書きする関数がありますか?
私はこれらの答えのいずれかがあなたの "defualts"が1レベル以上深い連想配列かもしれない場合に特に助けになるとは思っていません。
あなたが探しているものはarray_replace_recursive
だと思います。 HERESに
$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
}
それをチェックあなたはちょうどあなたが012の組み合わせを使用することができ、あなたが期待するオプションを維持し、残りの部分を破棄したい場合はhere
あなたはちょうどあなたが探している正確に何である
foreach($array1 as $key=>$value) $array2[$key]=$value;
これはほとんどの場合に機能するため、この使用例では「defaults」配列である '$ array2'を直接オーバーライドします。これは、意図された動作であってもなくてもよい。 –
array_merge()ような何かを行うことができます。
間違っていると、array_mergeはデフォルト以外の配列にキーを追加し、デフォルトの配列で利用できないキーで終わる可能性があります。 –
@RiccardoGalliデフォルトの配列では使用できないキーは使用されません。問題。 –
これは、1次元配列の場合、または配列のようなデフォルト値を完全に書き換えたときに、指定された値が意図した動作であることを意味します。 Sidenote:PHP 5.6でのパフォーマンスは 'foreach'より速く、PHP 7ではほとんど違いはありませんでした。 –
$defaults = array(
'some_key_1'=>'default_value_1',
'some_key_2'=>'default_value_2',
);
$inputs = array_merge($defaults, $inputs)
これは既存の回答に新しい洞察を追加することはほとんどありません – cfrick
コピー&ペーストでこれを使用することができます。 –
$ inputs配列に$ defaults配列にないキーが含まれていると結果に追加されます。 –
アウトおよび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:ドキュメントへのリンクを追加しました;) –
それは素晴らしいだろう! TY – Orangeman555