Array_merge łączy tablice, a tu masz dołączanie elementów tablic do konkretnych elementów tablic (mogą być tablicami, ale nie muszą). Rozwiązanie nie jest trudne, bo to tylko utworzenie, z kilku elementów wskazywanych przez indeksy, jednego elementu nowej tablicy. Pojawiają się jednak pewne drobne pytania przy okazji, jak choćby fakt czy jakiś element może się powtórzyć w polu "dołącz" i na jakim etapie sama operacja "łączenia" występuje. Przykładowo różne elementy w tablicy dolacz wskazują te same elementy starej tablicy (tu element o indeksie 4)
$tablica[0
]->dolacz = array(1
,4
); $tablica[1
]->dolacz = array(2
,4
);
Jest on po operacji transformacji w postaci:
array($tablica[0
], $tablica[1
], $tablica[4
]), array($tablica[1
], $tablica[2
], $tablica[4
]) );
Czy ów nadmiarowy $tablica[4] w drugim elemencie istnieje czy nie?
A teraz inny przypadek... Czy w trakcie operacji transformacji tablica wynikowa jednego działania jest startową dla kolejnego działania (łańcuchowo), czy może mogą one być wykonane niezależnie i dopiero operacja na wszystkich polach dolacz tworzy wynik? Poza tym... Czy wykonanie operacji dołączania zeruje pole dolacz? Bo jeśli nie to łańcuchowe wywołanie potrafi stworzyć złe wyniki, gdzie tablica bedąca wyjściem łączenia po pierwszym kroku ma już inne elementy. Najprostszy wariant to: mogą się duplikować, robione jednocześnie - wynik dopiero ostatecznym. Przy okazji nie zapomnij sprawdzać, czy element istnieje

Miałbyś bowiem wtedy zwykły foreach kopiujący elementy do nowej.
$bazowa = TU_JAKAŚ_TABLICA_OBIEKTÓW_Z_ATRYBUTEM_DOLACZ; // tu miej sobie jakąś bazową
$ostateczna = array(); // tu będziesz miał wyniki $elements_used = array(); // tu masz pomocniczą, która sprawdza czy element był już wykorzystany, przydaje się pod koniec do eliminacji już użytych... sam zobaczysz ;) foreach($bazowa AS $key => $element)
{
if(property_exists
('dolacz', $element) && is_array($element->dolacz) && count($element->dolacz) > 0) // sprawdzamy czy element posiada własność property i jest ona niepustą tablicą {
$temp_element = array($bazowa[$key]); //jeśli jest OK, to bierzemy ten element jako tablica tymczasowa... if(array_search($key, $elements_used) === FALSE) // ... sprawdzamy czy był już w użytych... {
$elements_used[] = $key; // ...jeśli nie, dodajemy do użytych...
}
foreach($element->dolacz AS $used) // ...iterujemy po kolejnych indeksach kluczy wskazanych jako elementy dołączane...
{
{
$temp_element[] = $bazowa[$used]; // ...jeśli są to dołączamy do tymczasowej...
if(array_search($used, $elements_used) === FALSE) // ... sprawdzamy czy był element już użyty... {
$elements_used[] = $used; // ... jesli nie to odajemy do użytych...
}
}
}
$ostateczna[] = $temp_element; // ... i wstawiamy do tablicy wynikowej.
}
}
foreach($elements_used AS $value) // teraz iterujemy się po elementach użytych...
{
unset($bazowa[$value]); // ... i usuwamy je :) }
foreach($bazowa AS $value) // to są już niedobitki...
{
$ostateczna[] = $value; // ... które dodajemy do wynikowej
}
Oczywiście to tylko jedna z możliwych implementacji, zależnie co kod ma robić. Mój przykład zakłada, że:
1) Pola zawierające tablicę w polu polacz są priorytetowo obsługiwane i jej brak powoduje przerzucenie na koniec obsługi, po eliminacji elementów wskazywanych przez tablice dolacz, co Twój przykład wskazuje jako docelowe działanie.
2) Elementy są kopiowane wielokrotnie jeśli pole dolacz dla rożnych obiektów wskazuje na ten sam.
3) Nie usuwamy z wynikowej tablicy pól dolacz, mimo iż w późniejszych etapach mogą wprowadzić błędy. Chcesz to zrobić? Oczyść sobie z tego pola elementy tablicy $ostateczna
4) Usuwanie pola dolacz gdzieś wewnątrz foreach($element->dolacz AS $used) jest niemożliwe. Może dojść do usunięcia tego pola z elementów, które powinny być przetwarzane.