Mam sobie taki problem. Otóż potrzebuję rozwiązania, które pozwoli mi na wcielenie elementów jednej tablicy do drugiej.
Chodzi o zredukowanie ilości zapytań do bazy danych oraz pętel.
Postaram się przedstawić problem najprościej jak mogę - na przykładzie np. newsów i komentarzy do nich.
Pobieram z bazy wszystkie newsy i otrzymuję ich identyfikatory i rzecz jasna jakąś tam treść.
Następnie pobieram z bazy komentarze do newsów i otrzymuję ich identyfikator główny oraz identyfikator odnoszący się do newsa.
I teraz: wykonałem 2 zapytania do bazy posiadam 2 listy: jedną z newsami a drugą z komentarzami. Np.:
A chciałbym połączyć to tak, aby wyglądało to w ten sposób:
Array ( [news] => 1 [tresc] => tesc1 [komentarz] => 1 [news] => 1 [tresc] => komentarz pierwszy do newsa 1 ) [komentarz] => 2 [news] => 1 [tresc] => komentarz drugi do newsa 1 ) ) ) [news] => 2 [tresc] => tesc2 [komentarz] => 3 [news] => 2 [tresc] => komentarz pierwszy do newsa 2 ) ) ) ) )
Zaiste można pobrać newsy a potem w pętli pobierać do nich komentarze ale rozwiązanie to nie jest zbyt optymalne.
Można także w pętli odtworzyć tablicę z newsami i potem przeszukiwać za każdym razem tablicę z komentarzami, coś w tym rodzaju:
$aktualnosci = $this->pobierz_aktualnosci(); $komentarze= $this->pobierz_komentarze(); $newsy = []; foreach($aktualnosci as $aktualnosc) { foreach($komentarzeas $komentarz) { if($komentarz['news'] == $aktualnosc['news']) $aktualnosc['komentarze'][] = $komentarz; } $newsy[] = $news; }
Ale to rozwiązanie nie wydaje mi się też zbyt optymalne.
Wydaje mi się, że próbuję wynajdywać koło na nowo. Istnieje na to jakiś prosty sposób? Jakaś gotowa funkcja tablicy? Coś w rodzaju połączenia obu tablic przy pomocy klucza, który wiązałby obie tablice w jakiś sposób.
Najlepiej, jakby dało się to załatwić już na poziomie pobierania danych z bazy.