![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 184 Pomógł: 2 Dołączył: 3.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam, od jakiegoś czas główkuję nad rozwiązaniem problemu wielopoziomowego menu generowanego na podstawie bazy, chodzi mi o coś w tym stylu:
<ul> <li>1</li> <li>2 <ul> <li>2-1</li> <li>2-2 <ul> <li>2-2-1</li> <li>2-2-2</li> </ul> </li> </ul> <li> </ul> struktura bazy danych wyglądała by następująca: ID | PARENT_ID | NAME | 1 | 0 | 1 | 2 | 0 | 2 | 3 | 2 | 2-1 | 4 | 2 | 2-2 | 5 | 4 | 2-2-1 | 6 | 4 | 2-2-2 | wiem że mógłbym wykorzystać rekurencje która przy każdym powtórzeniu wyszukiwała by coraz niższego poziomu drzewa zaczynając od 0, jednak jeżeli będę miał 10 opcji, w każdej po 5 podopcji i jeszcze w co 2 podopcji kolejne dwie to naglę ilość zapytań do bazy będzie astronomiczna, a to tylko podczas rysowania samego menu, dlatego chce wykonać 1 zapytanie za pomocą którego pobieram całą bazę i zrzucam ją do tablicy i na niej chce operować, jednak wszystkie próby moje napisania tego kończyły się komunikatem Fatal error: Allowed memory size of 536870912 bytes exhausted. Nie mam bladego pojęcia jak podejść do tego w taki sposób aby nie powstała mi wieczna pętla. Szukałem różnych rozwiązań wykorzystujących rekurencje jednak znaczna ilość z nich operowała na takiej oto strukturze: Jeżeli ktoś zna gotowy przykład albo chociaż coś na bazie czego mógłbym napisać sobie taką funkcję to bardzo proszę o pomoc ![]() |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 184 Pomógł: 2 Dołączył: 3.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
no rozwiązanie też trochę słabe bo aby zbudować całe menu musiałem przerobić to w taki oto sposób:
przy bazie np 50 rekordów trochę słabo widzę wydajność tego + jeszcze trzeba by dopisać 3 funkcję która zbuduje na podstawie takiej tabeli kod html i tutaj też będzie potrzebna rekurencja. Ten post edytował troian 12.09.2017, 12:30:38 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Ale jaki masz problem? Masz typowy use case gdzie masz zbudować menu na podstawie tablicy id-parent_id. Jest pełno w sieci rozwiązań jak to zbudować. To co Ci podesłałem to jeden z przykładów i tam też jest wiele rozwiązań.
Może lepiej napisz dokładnie czego chcesz? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 184 Pomógł: 2 Dołączył: 3.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
Ale jaki masz problem? Masz typowy use case gdzie masz zbudować menu na podstawie tablicy id-parent_id. Jest pełno w sieci rozwiązań jak to zbudować. To co Ci podesłałem to jeden z przykładów i tam też jest wiele rozwiązań. Może lepiej napisz dokładnie czego chcesz? Masz rację jednak ja albo jestem jakiś nie... albo nie potrafię korzystać z google ![]() Chciałem napisać coś na takiej zasadzie: function menu($id=0) { $data = $this->data; // tutaj znajduje sie cala tablica menu pobrana wcześniej z sql forech($data as $key=>$value) [...] i bezpośrednio budować menu w postaci html <ul><li> itd... i w przypadku w którym natrafia np na $value->parent_id wykonuje jeszcze raz funkcje $this->menu($this->parent_id); tylko w żaden sposób nie potrafię wymyślisz jak powinna wyglądać taka funkcja aby prawidłowo operowała na bazie i generowała wyjściowy kod html } edit; Udało mi się napisać skrypt który działa w oparciu o 2 funkcję oto moje dzieło:
Pewnie szło by to zrobić lepiej ale ważne że działa, może komuś się przyda to zostawię to tutaj Ten post edytował troian 13.09.2017, 11:19:16 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 15:21 |