0

2つの配列があり、それらをマージしたいのですが、アイテムが2番目の配列に見つからない場合は、空の値のキーを挿入します。基本的に、2つのarray1サブキーに一致するarray1のarray2からアイテムを追加します。配列2は配列1と同じ長さである必要はなく、常に長さが短くなります。

array1

[0][item] = 'aaaa'
   [type] = '1234'

[1][item] = 'aaaa'
   [type] = '6789'

[2][item] = 'bbbb'
   [type] = '1234'

[3][item] = 'bbbb'
   [type] = '6789'

そしてarray2:

[0][item] = 'aaaa'
   [type] = '1234'
   [feature] = 'www'

[1][item] = 'aaaa'
   [type] = '6789'
   [feature] = 'www'

結果:

[0][item] = 'aaaa'
   [type] = '1234'
   [feature] = 'www'

[1][item] = 'aaaa'
   [type] = '6789'
   [feature] = 'www'

[2][item] = 'bbbb'
   [type] = '1234'
   [feature] = ''

[3][item] = 'bbbb'
   [type] = '6789'
   [feature] = ''

私はここでいくつかの提案を試しましたが、それらはすべて1つの次元配列またはインデックスに一致するものになります。何か疑惑はありますか?

4

4 に答える 4

0

次のようなものを使用できます。

array_walk($array, function ($arr, $key) use ($array2) {
   if (array_key_exists($key, $array2) && is_array($array2[$key])) {
      $arr = array_merge($arr, $array2[$key]);
   }
});
print_r($array); // Will have all missed keys from $array2
于 2012-06-11T11:41:58.033 に答える
0

このようなことを試しましたか?

foreach ($array1 as $key=>$value){
   if (isset($array2[$key]['feature'])){
      $array1[$key]['feature'] = $array2[$key]['feature'];
   } else {
      $array1[$key]['feature'] = '';
   }
}
于 2012-06-11T11:28:29.873 に答える
0

配列キーを介して、PHPにマッチングを実行させます。

$result=array();
foreach ($array1 as $item) {
  $item['feature']='';
  $result[$item['item'].'-'.$item['type']]=$item;
}
foreach ($array2 as $item) {
  $result[$item['item'].'-'.$item['type']]['feature']=$item['feature'];
}
$result=array_values($result);
于 2012-06-11T11:34:55.437 に答える
0

'feature'の空の文字列は必要ありません。将来の反復では、issetを使用して確認できます。物事をシンプルに保ち、必要のない構造や保守が難しい構造を作成しないでください。これはn個のサブキーで機能し、メンテナンスは必要ありません。

$ar1 = array(
        array('item' => 'aaaa', 'type' => '1234'),
        array('item' => 'aaaa', 'type' => '6789'),
        array('item' => 'bbbb', 'type' => '1234'),
        array('item' => 'bbbb', 'type' => '6789')
    );
    $ar2 = array(
        array('item' => 'aaaa', 'type' => '1234','feature' => 'www'),
        array('item' => 'aaaa', 'type' => '6789','feature' => 'www')
    );
    for ($i = 0;$i<count($ar1);$i++) {
        if (array_key_exists($i, $ar2)){
            $result[] = array_merge($ar2[$i], $ar1[$i]);
        } else {
            $result[] = $ar1[$i];
        }
    }

// result
Array
(
    [0] => Array
        (
        [item] => aaaa
        [type] => 1234
        [feature] => www
    )

    [1] => Array
    (
        [item] => aaaa
        [type] => 6789
        [feature] => www
    )

    [2] => Array
    (
        [item] => bbbb
        [type] => 1234
    )

    [3] => Array
    (
        [item] => bbbb
        [type] => 6789
    )

)
于 2012-06-11T11:56:40.427 に答える