Ale Tobie chodzi o klucze, a nie wartości, czyli musiałbyś użyć
array_diff_key. Problem z tym, że skoro masz X tablic, to działań masz masę... Czemu? Ponieważ masz porównania wszystkich tablic między sobą. Przypuśćmy, że masz tablice A, B i C... To do tablicy A dodajesz klucze wynikające z różnic między C i A oraz C i B. Jednocześnie robisz to samo z B (C i B oraz A i B) oraz C (A i C oraz B i C). Co gorsze to muszą one w trakcie wszystkich operacji być niezmienne. To daje nam 6 operacji. Liczba ta rośnie według wzoru n!... czyli 5 tablic to 5! = 120 samych operacji array_diff_key.
A jak wyglądałby sam proces tym sposobem? Najprościej do wytłumaczenia chyba tak:
1. Wybierz tablicę.
2. Utwórz pustą.
3. Wykonaj array_diff_key innej oraz wybranej.
4. Połącz ją z tą utworzoną w punkcie 2.
5. Jeśli jest kolejna tablica - weź ją i idź do punktu 3
6. Jeśli nie ma, weź sobie wszystkie wartości tablicy z punktu 2 ustaw na takie jakie sygnalizują, że to nowy klucz
7. Dołącz tablicę bazową z punktu 1, a wynik to właśnie to jak wygląda ta tablica bazowa po zmianach.
8. Powtarzaj aż skończą Ci się tablice.
Uważaj...
Nie możesz działać na referencjach, gdyż po pierwszej zmianie miałbyś już zafałszowaną tablicę bazową. Dla Twojego przykładu wyglądałby proces tak:
1. Weź $dane[0]
2. Utwórz pustą $wynik[0]
3. Zrób różnice dla $dane[1] diff $dane[0] (nazwa_2, nazwa_3, nazwa_5, nazwa_6) oraz $dane[2] diff $dane[0] (nazwa_2, nazwa_3)
4. Dostajemy tablicę $wynik[0] z kluczami (nazwa_2, nazwa_3, nazwa_5, nazwa_6) i ustawiamy im jakąś wartość charakterystyczną
5. Do tej tablicy dołączamy bazową.
6. Podobnie robimy z resztą.
EDIT: Niktoś, problem jest taki, że z ]
array_merge trzeba uważać. Zobacz sobie jak ona się zachowuje przy kluczach numerycznych. Tu trzeba naprawdę dobrze "wyczuć". Pomysł z array_merge jest o wiele lepszy niż z array_diff_key, ale naprawdę trzeba uważać na klucze.