2017-06-15 13 views
0

私は2つの配列を取り、それらを互いにマージしようとしています。最初の配列は、「インデックス」アレイとして機能する、すなわち - それは、出力アレイが望ましいであろうことは形式である:PHPインデックス配列を参照として2つの配列を互いに結合する - 出力として2つの配列

$array1 = [ 
    'DIV1' => 'Some element data', 
    'SUPPLEMENTAL' => [ 
     'RPC' => '10.24.122.32', 
     'PORT' => '8080' 
    ], 
    'ASG' => 'some arbitrary data' 
]; 

$array2 = [ 
    'DIV2' => 'Some more element data', 
    'ASG' => 'different arbitrary data', 
    'DIV1' => 'Some element data that refers to the other object' 
    'SUPPLEMENTAL' => [ 
     'RPC' => '10.24.123.1' 
    ] 
]; 

したがってマージした後、我々は効果的に二つの配列を有するであろう。これは、2回呼び出される1つの関数として行うことができます。これは、各配列をパラメータとして渡します(2番目の呼び出しでは逆になり、インデックス配列を何らかの方法で定義します)。キーは-only-、no値で持ち越されます。私たちは、このように見えるの配列で終わるでしょう:

$array1 = [ 
    'DIV1' => 'Some element data', 
    'DIV2' => '',      // blank because only key was moved 
    'SUPPLEMENTAL' => [ 
     'RPC' => '10.24.122.32', 
     'PORT' => '8080' 
    ], 
    'ASG' => 'some arbitrary data' 
]; 

$array2 = [ 
    'DIV1' => 'Some element data that refers to the other object' 
    'DIV2' => 'Some more element data', 
    'SUPPLEMENTAL' => [ 
     'RPC' => '10.24.123.1', 
     'PORT' => ''     // blank because only key was moved 
    ], 
    'ASG' => 'different arbitrary data' 
]; 

輸入(空白)キーは、いくつかの順に入れていることが重要-extremely-されていませんが、既存の要素の順序の保存が重要です。インデックス配列の順序定義(この場合は配列1)に従う限り、

複数のディメンションにいくつかの並べ替えソートを行う必要があると思います。

+0

を私は、アレイ2の出力でDIV1は – Rahul

+0

@Rahulあなたが何を意味するのか、空白ではないだろうと思いますか?私は欠けているキーを移動し、空の文字列/ nullに値を設定するプロシージャを探しています。 –

+0

DIV1はarray2から抜けていないので、空白にしないでください。 – Rahul

答えて

1

あなたのデータが同じ順序でキーを持っていないので、キーの順序を維持することが困難になるだろう、しかし、あなたは再帰関数で必要なものを達成することができます:

function recursiveReKeyArrays(array $array1, array $array2) 
{ 
    // Loop through the array for recursion 
    foreach ($array2 as $key => $value) { 
     if (!is_array($value)) { 
      continue; 
     } 

     $array1[$key] = recursiveReKeyArrays($array1[$key], $value); 
    } 

    // Find the differences in the keys 
    foreach (array_diff_key($array2, $array1) as $key => $value) { 
     $array1[$key] = null; 
    } 

    return $array1; 
} 

を通じてこれがループ配列である値を見つけて再帰的に検索し、見つからないキーを見つけてnullに設定します。これはあなたにこの出力が得られます

:ここ

Array 
(
    [DIV1] => Some element data 
    [SUPPLEMENTAL] => Array 
     (
      [RPC] => 10.24.122.32 
      [PORT] => 8080 
     ) 

    [ASG] => some arbitrary data 
    [DIV2] => 
) 
Array 
(
    [DIV2] => Some more element data 
    [ASG] => different arbitrary data 
    [DIV1] => Some element data that refers to the other object 
    [SUPPLEMENTAL] => Array 
     (
      [RPC] => 10.24.123.1 
      [PORT] => 
     ) 

) 

例:http://ideone.com/5ml1y4

関連する問題