объединить 2 ассоциативных массива, где значения соответствуют

У меня есть 2 ассоциативных массива: $ arr1 & $ arr2. Я хотел бы создать $ arr3, который бы сочетал «имя» и «символ», если даты совпадают … если даты не совпадают, то просто символ:

Вот $ arr1:

Array ( [0] => stdClass Object ( [date] => 2010/01/01 [name] => Mario Lopez ) [1] => stdClass Object ( [date] => 2010/01/02 [name] => Lark Voorhies ) ) 

Вот $ arr2:

 Array ( [0] => Array ( [date] => 2010/01/01 [character] => AC Slater ) [1] => Array ( [date] => 2010/01/02 [character] => Lisa Turtle ) [2] => Array ( [date] => 2010/01/03 [character] => Kelly Kapowski ) ) 

Использование array_intersect дает следующую ошибку: «Объект класса stdClass не может быть преобразован в строку».

Вот что я хотел бы получить, если это возможно (например, $ arr3):

 Array ( [0] => stdClass Object ( [date] => 2010/01/01 [name] => Mario Lopez [character] => AC Slater ) [1] => stdClass Object ( [date] => 2010/01/02 [name] => Lark Voorhies [character] => Lisa Turtle ) [2] => stdClass Object ( [date] => 2010/01/03 [character] => Kelly Kapowski ) ) 

Эта функция была опубликована на php.net, и я использую ее довольно долгое время. Он должен делать то, о чем вы просите

 function array_extend($a, $b) { foreach($b as $k=>$v) { if( is_array($v) ) { if( !isset($a[$k]) OR isset($v[0])) { $a[$k] = $v; } else { $a[$k] = array_extend($a[$k], $v); } } else { $a[$k] = $v; } } return $a; } 

Применение:

 $array = array_extend($orig_array,$new_array); 

Обратите внимание, что вам придется либо преобразовать объекты в массивы, либо изменить функцию для преобразования объекта в массив «на лету» ($ a = (array) $ a);

Редактировать:

Оригинальный источник http://www.php.net/manual/en/function.array-merge.php#95294

Обратите внимание, что я сделал небольшую модификацию, чтобы решить проблему с данной функцией, где она не будет правильно расширять массив с помощью цифровых клавиш