2

外部ソースからの 4 つまたは 5 つのレベルにネストされた 2 つの配列があります (そのため、可能であれば構造を手動で変更することはできませんし、したくありません)。以下に問題を単純化しましたが、構造が制御不能であるため、ある程度一般的な解決策が必要であることを覚えておいてください。

$x = array (
  'one' => 
  array (
    'two' => 2,
    'three' => 
    array (
      0 => 3,
    ),
  ),
);

$y = array (
  'one' => 
  array (
    'three' => 
    array (
      0 => 3,
    ),
    'four' => 4,
    'five' => 5,
  ),
  'six' => 6
);

これらをマージして取得したい:

array (
  'one' => 
  array (
    'two' => 2,
    'three' => 
    array (
      0 => 3,
    ),
    'four' => 4,
    'five' => 5,
  ),
  'six' => 6
)

私は次のすべてを試しましたが、正確に上記のことを教えてくれるものはありません:

var_dump($x+$y);
var_dump(array_merge($x,$y));
var_dump(array_merge_recursive($x,$y));

var_dump($y+$x);
var_dump(array_merge($y,$x));
var_dump(array_merge_recursive($y,$x));

したがって、マージを行うにはカスタム コードが必要だと思います。それはどうなりますか?汎用的かつシンプルに保ちます。

4

2 に答える 2

1
function array_merge_recursive_unique($array1, $array2) {
  if (empty($array1)) return $array2; //optimize the base case

  foreach ($array2 as $key => $value) {
    if (is_array($value) && is_array(@$array1[$key])) {
      $value = array_merge_recursive_unique($array1[$key], $value);
    }
    $array1[$key] = $value;
  }
  return $array1;
}

投稿する前に検索してください。これは、merge-2-arrays-with-no-duplicated-keysの複製です。

于 2013-03-04T19:36:25.097 に答える
1

Zend \ StdLib \ ArrayUtils :: merge()を使用します。このメソッドは、ZF2の構成配列をマージするために使用され、必要に応じて実行します。

参照: https ://github.com/zendframework/zf2/blob/master/library/Zend/Stdlib/ArrayUtils.php

于 2013-03-04T19:37:24.620 に答える