Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wielowymiarowa tablica na listę ul
Forum PHP.pl > Forum > PHP
Asmox
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?
nospor
A na pewno dobrze skopiowales do siebie kod tej funkcji? Nie zmieniales nic przypadkiem?
Asmox
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.
nospor
Nie: if ($array == null) $array = $this->idTree;
a: if ($array === null) $array = $this->idTree;

ps:
$this->idTree - dziwna nazwa jak na tablicę :/
Asmox
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?
nospor
== 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
Asmox
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ąć.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.