<?php
0=>array('zwierze'=>'kot','rasa'=>'pers'),
1=>array('zwierze'=>'kot','rasa'=>'dachowiec'),
2=>array('zwierze'=>'pies','rasa'=>'jamnik'),
);
0=>array('zwierze'=>'kot','rasa'=>'abisyński'),
1=>array('zwierze'=>'pies','rasa'=>'dog niemiecki'),
2=>array('zwierze'=>'kot','rasa'=>'pers'),
);
$array_tmp=array_merge($array2,$array1); // kolejność jest istotna na dalszym etapie $i=0;
foreach($array_tmp as $q){ // zamieniamy na tablicę jednowymiarową
$array_tmp[$i++]=implode('|',$q); //znak który nie jest używany w wartościach }
$i=0;
foreach($array2[0] as $k => $v){ // zapisujemy sobie nazwy kluczy, wybór $array2[0] jest totalnie obojętny, może być $array1[5] (o ile istnieje) ponieważ zakładamy że każda tablica ma tyle samo elementów
$keys[$i++]=$k;
}
$array_master=array_slice($array_tmp,0
,count($array2)); // wybieramy tablicę $array2 zamienioną na jednowymiarową $array_slave=array_slice($array_tmp,count($array2)); // wybieramy tablicę $array1 zamienioną na jednowymiarową $array_tmp=array_diff($array_master,$array_slave); // główna operacja foreach($array_tmp as $v){ // zamieniamy na tablicę dwuwymiarową zgodnie z pierwotnymi kluczami
$j=0;
foreach($keys as $k){
$word[$k]=$result[$j++];
}
$array3[$i++]=$word;
}
?>
Jeśli wykonywałeś swój kod na podanych przez siebie tablicach to w ogóle dziwne, że w jakikolwiek sposób to działało ponieważ w większości te funkcje nie nadają się do wielowymiarowych tablic. Przynajmniej u mnie wywalało jak najbardziej poprawny błąd

. Dlatego też najpierw zamieniam tablicę dwuwymiarową na jednowymiarową, i na niej dokonuję operacji. Ogólnie kod możnaby zdecydowanie skrócić, ale postawiłem na uniwersalność, dzięki temu nie musisz podawać kluczy ponieważ najpierw jest tworzona tablica, która zawiera te klucze. Założenie które musi być spełnione jest takie, że tablica jest dwuwymiarowa oraz ilość poszczegolnych elementów musi być stała. Natomiast to co na pewno można zrobić to zrezygnować ze zmiennych array_master i array_slave i wrzucić ich wartość bezpośrenio do array_diff, chciałem żeby kod był czytelny. W implode i explode tak jak wspomniałem separator nie może występować w wartościach z wiadomych powodów. Kod można łatwo zmienić tak, aby działal z innego rodzaju tablicami