二つの配列をマージして重複するデータを取り除く

・・・例によって嵌ったのでメモしておく
単純な配列の場合、array_mergeして、array_uniqueで問題ないが、対象が配列の配列だった場合は、期待通りの動作をしないため嵌った


どうやら、配列の配列の場合、arrayは文字として解釈され、その中身は解釈されないことが原因のようだ。


解決策はこんな感じ

<?php
$array1 = array( 1 => array('hoge' => 'aaa'),
                 2 => array('hoge' => 'BBB'),
                 3 => array('hoge' => 'ccc'),
                 4 => array('hoge' => 'DDD'),
                 5 => array('hoge' => 'EEE')
          );
$array2 = array(11 => array('hoge' => 'aaa'),
                12 => array('hoge' => 'BBB'),
                13 => array('hoge' => 'CCC'),
                14 => array('hoge' => 'ddd'),
                15 => array('hoge' => 'FFF')
          );
// 二つの配列をマージして重複するデータを取り除く
$merge_array = array_merge($array1, $array2);           //まずはマージする
$merge_array = array_map('serialize', $merge_array);    //シリアライズしてarray()から文字列に変換
$merge_array = array_unique($merge_array);              //ユニークを取る
$merge_array = array_map('unserialize' , $merge_array); //アンシリアライズしてarray()に戻す
 
printf("%s\n",var_export($merge_array, true));
?>