Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wielowymiarowa tablica na listę ul
Asmox
post
Post #1





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

Ostrzeżenie: (0%)
-----


Witam, znalazłem taką oto funkcję na przerabianie wielowymiarowej tablicy na listę ul: http://porady-it.pl/porada-191-PHP_Jak_z_w...ypu_ul_li_.html
I nie wiem, czy to u mnie na serwerze coś cienko cienko, czy to po prostu nie jest najlepszy sposób. Bo oto taka nieduża tablica:
Kod
Array
(
    [aph] => Array
        (
            [linki] => Array
                (
                    [download] => Array
                        (
                        )

                )

            [strony] => Array
                (
                    [art] => Array
                        (
                        )

                    [webmastering] => Array
                        (
                        )

                    [kuchnia] => Array
                        (
                            [grecja] => Array
                                (
                                )

                        )

                )

        )

)

Nie może zostać rozpisana, ponieważ wyskakuje błąd:
Cytat
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 261900 bytes) in C:\Program Files (x86)\wamp\www\klasy\tree.class.php on line 88

Normalnie tablica była generowana automatycznie w oparciu o bazę mysql. Ale kiedy sam sobie wpisałem deklarację takiej tablicy i wyświetla się ten sam błąd, to doszedłem do wniosku, że coś jest nie tak. Czy mógłby mi ktoś pomóc z tym problemem?


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A na pewno dobrze skopiowales do siebie kod tej funkcji? Nie zmieniales nic przypadkiem?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Asmox
post
Post #3





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

Ostrzeżenie: (0%)
-----


Nie do końca, otóż ja to trochę przerobiłem na metodą wchodzącą w skład klasy obsługującej drzewa...
Kod
public function treeToList($array = null) {
        if ($array == null) $array = $this->idTree;
        $list = '<ul>';
        foreach ($array as $key => $record) {
            if (is_array ($record)) {
                $label = $this->nodes[$key]->getLabel();
                $list.= '<li>'.$label;
                $list.= $this->treeToList($record);
                $list.= '</li>';
            }
            else {
                $label = $this->nodes[$record]->getLabel();
                $list.='<li>'.$label.'</li>';
            }
        }
        $list.= '</ul>';
        return $list;
    }
/*
$nodes - tablica przechowująca węzły
$node->getLabel - metoda zwracająca etykietę (nazwę węzła)
*/

Hm... jak próbowałem to normalnie zrobić (żywcem skopiować ze strony) i podać tą swoją normalną tablicę to wszystko było ok.


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie: if ($array == null) $array = $this->idTree;
a: if ($array === null) $array = $this->idTree;

ps:
$this->idTree - dziwna nazwa jak na tablicę :/


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Asmox
post
Post #5





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 15.02.2011, 14:33:27 ) *
ps:
$this->idTree - dziwna nazwa jak na tablicę :/

Spoko, ja zwykle stosuję dziwne nazewnictwa, jak np tutaj do sprawdzenia, czy zostały przeprowadzane modyfikacje w skrypcie budującym drzewo jako wielowymiarową tablicę (klik) biggrin.gif
idTree to nazwa tablicy, która przechowuje drzewo jako wielowymiarową tablicę identyfikatorów, z którego później tworzę listę ul, żeby wypisać na stronie. Po nic innego nie jest mi to potrzebne, ale idTree - drzewo identyfikatorów chyba jakoś odzwierciedla zadanie, jakie spełnia to pole.
Tak czy siak... Nie wiem, jak... ale działa, stokrotne dzięki nosporze smile.gif
Ale muszę przyznać, że pierwszy raz się z czymś takim spotkałem. Czy tak się dzieje dlatego, że pusta tablica mogła zostać przekonwertowana na null? Ale w takim razie, dlaczego [if (empty ($array)) = $this->idTree; ] daje takie same złe wyniki tj. z przepełnieniem pamięci?

Ten post edytował Asmox 15.02.2011, 17:32:51


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




== porównuje wartosci
pusta tablica i null to dla == poprostu pusta wartosc i jest sobie równa

=== porównuje również typy. null a tablica to dwa różne typy


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Asmox
post
Post #7





Grupa: Zarejestrowani
Postów: 359
Pomógł: 12
Dołączył: 16.01.2009

Ostrzeżenie: (0%)
-----


Ok, dzięki, nie wiedziałem że tablica też jest oddzielnym typem. Myślałem, że tablicę bierze się jako zbiór zmiennych, z których każda ma swój typ, ale sama tablica jako tako nie jest żadnym typem. Ale dobra, już rozumiem, dzięki za rozwiązanie problemu z wyjaśnieniem, temat można zamknąć.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 03:13