![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 20 Pomógł: 0 Dołączył: 23.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
witam wszystkich w swoim pierwszym poście (IMG:style_emoticons/default/wink.gif) . Otóż mam problem z łączeniem tablic. Mam tablice z zmieniającą się liczbą elementów.
każdy element tablicy ma pole (tablice) 'dolacz' np. pole 'dolacz' wskazuje z jakimi indeksami ma dana tablica się połączyć a reszta żeby została dodana do kolejnych elementów tablicy żeby powstało coś takiego proszę o nakierowanie na odpowiedni tok myślenia bo szczerze żaden mój pomysł nie wypalił |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
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)
Jest on po operacji transformacji w postaci:
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 (IMG:style_emoticons/default/smile.gif) Miałbyś bowiem wtedy zwykły foreach kopiujący elementy do nowej.
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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 15.10.2025 - 07:20 |