2017-08-09 8 views
0

デフォルトのキーと値のペアを持つ新しい多次元配列を定義する最適な方法は何ですか?新しい多次元配列の部分配列にデフォルト値をマージする方法は?

私はそれが最高の、ここでのサンプルコードで説明だと思う:

$defaultOptions = ['foo' => 'bar', 'another' => 'value']; 
$mdArray = [ 
    'first' => [ 
     'title' => 'I am first', 
     $defaultOptions, 
    ], 
    'second' => [ 
     'title' => 'I am second', 
     $defaultOptions 
    ] 
]; 

これが生成します。

Array 
( 
    [first] => Array 
       ( 
        [title] => I am first 
        [0] => Array 
          ( 
           [foo] => bar 
           [another] => value) 
         ) 
    [second] => Array 
       ( 
        [title] => I am second 
        [0] => Array 
          ( 
           [foo] => bar 
           [another] => value 
          ) 
       ) 
) 

をキー/値のように、私は、$mdArray$defaultOptionsから省略する0キーをしたいと思いますペアは、$defaultOptionsが定義されているレベルと同じレベルに適用されます。

配列定義内で実行する方法はありますか、または後でこの配列を処理して追加する必要がありますか?$defaultOptions

+1

「array_merge」を使用 –

答えて

2

2つの方法で実現できます。

最初のオプションは、+演算子を使用することである。

$mdArray = [ 
    'first' => ['title' => 'I am first'] + $defaultOptions, 
    'second' => ['title' => 'I am second'] + $defaultOptions 
]; 

+オペレータが左側 アレイに付加右アレイ返します。両方の配列に存在するキーの場合は、 左側の配列の要素が使用され、 右側の配列の一致する要素は無視されます。

http://php.net/manual/en/language.operators.array.php

第2のオプションはarray_merge()関数を使用することである:入力配列が同じ文字列のキーを持っている場合は、そのキーの後値 が上書きされ

$mdArray = [ 
    'first' => array_merge(['title' => 'I am first'], $defaultOptions), 
    'second' => array_merge(['title' => 'I am second'], $defaultOptions) 
]; 

を前の1つただし、配列 に数値キーが含まれている場合、後の値は元の の値を上書きしませんが、追加されます。 キーの入力配列の値は、 の結果配列の0から始まるインクリメントキーの番号が付け替えられます。

http://php.net/manual/en/function.array-merge.php

+0

完璧なソリューション。私はarray_mergeを使うのではなく、むしろネイティブのPHP変数の割り当てを使いたいと思っていました。 – WraithLux

0

これはarray_mergeで達成することができます:あなたは以下array_merge()

を使用する必要が

$defaultOptions = ['foo' => 'bar', 'another' => 'value']; 
$mdArray = [ 
    'first' => array_merge(['title' => 'I am first'], $defaultOptions), 
    'second' => array_merge(['title' => 'I am second'], $defaultOptions), 
]; 
2

が更新されたコードです:

<?php 

$defaultOptions = ['foo' => 'bar', 'another' => 'value']; 
$mdArray = [ 
    'first' => [ 
     'title' => 'I am first' 
    ], 
    'second' => [ 
     'title' => 'I am second' 
    ] 
]; 

foreach($mdArray as $key => $value){ 
    $mdArray[$key] = array_merge($mdArray[$key], $defaultOptions); 
} 

print_r($mdArray); 
?> 

そして、ここでは、出力されます。

Array 
(
    [first] => Array 
     (
      [title] => I am first 
      [foo] => bar 
      [another] => value 
     ) 

    [second] => Array 
     (
      [title] => I am second 
      [foo] => bar 
      [another] => value 
     ) 

) 
0

ループ方式が掲載+ではありませんでした純粋なので、私はそれを追加します。これにより、参照変数(&$a)を介してメインアレイにデフォルト値が追加されます。

コード:

$defaultOptions=['foo'=>'bar','another'=>'value']; 
$mdArray = ['first'=>['title'=>'I am first'], 
      'second'=>['title'=>'I am second'] 
]; 
foreach($mdArray as &$a){ 
    $a+=$defaultOptions; 
} 
var_export($mdArray); 

が出力:

array (
    'first' => 
    array (
    'title' => 'I am first', 
    'foo' => 'bar', 
    'another' => 'value', 
), 
    'second' => 
    array (
    'title' => 'I am second', 
    'foo' => 'bar', 
    'another' => 'value', 
), 
) 

とレコードの(呼び出すための以下の直感的な機能であるが)、array_replace()は、同様にこのタスクを実行します:

foreach($mdArray as &$a){ 
    $a=array_replace($a,$defaultOptions); 
}