PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rekrusive Funktion



Surviver
16.10.2007, 07:42
Hallo, ich sitze gerade an einem Projekt, das über Kategorien und Unterkategorien verfügen soll.

Die Struktur ist ähnlich wie die des Foren-Systems.

Jetzt habe ich folgendes Problem:
Ich möchte prüfen, ob eine Kategorie X eine Unterkategorie von Y ist - wenn ja true zurück, anderenfalls eben false;

Zu den Strukturen:

Ich habe ersteinmal enen Cache, in dem alle Kategorie sind - mit ID und parentid (Übergeordnet).

Dann mache ich erstmal folgendes:
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------

So habe ich dann ein Array, in dem für jede Kategorie, die Unterkategorien hat, ein Array mit den IDs der Unterkategorien befindet.

Dann möchte ich mit der folgenden Funktion prüfen, ob $catid ein Unterforum von $ofwhich ist

PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------

Aber irgendwo ist da noch der Wurm drin - entweder ich bekomme ein falsches Ergebnis (im besten Fall), die Datei mit leerem Inhalt zum Dwnload angeboten oder eine Fehlermeldung
Fatal error: Allowed memory size of xxxx bytes exhausted ...

Ich komme dieshalb nicht weiter, es wäre toll, wenn jemand einen Tip hat.
Ich hoffe, ich habe alle nötigen Informationen geben.

Gruß Julian

Andreas
16.10.2007, 09:26
$icache ist nicht im Scope?

Hoffi
16.10.2007, 09:48
Ich denke das Andreas da schon das richtig erkannt hat. (Wie immer ;))

$icache ist nicht Global. Das heisst beim Aufruf der Funktion bildet diese Ihre eigene $icache, die somit leer ist.

Füge in der funktion am Anfang
PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------
an.

Ich fall da auch noch hin und wieder mal drauf rein.

Surviver
16.10.2007, 14:13
Habe ich vergessen: Das ganze ist in einer Klasse, und da heisst es $this->icache -> Das ist also nicht das Problem. Und wenn es das wäre, würde es ja auch nur einen falschen Rückgabewert geben, aber keine PHP-fehlermeldung ;)

Gruß Julian

Hoffi
16.10.2007, 15:44
Versuch mal das so ungefähr.

PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------

Surviver
16.10.2007, 17:28
Danke erstmal, was ist denn die Variable $r?

Surviver
16.10.2007, 19:36
Habe es hinbekommen - ich weiss nicht genau woran es lag, jedenfalls funktioniert es jetzt - und ist auch logisch ;)

PHP:
----------
Der Inhalt dieses Abschnitts ist nur für Lizenznehmer sichtbar, Sie werden derzeit jedoch nicht als Lizenzinhaber erkannt.<br />
<br />
Bitte öffnen Sie den <a href="http://members.vbulletin-germany.com/membersupport_priority.php">Kundenbereich</a>, tragen Sie Ihre E-Mail-Adresse ein, mit der Sie sich hier registriert haben und aktivieren Sie die Lizenzüberprüfung für http://www.vbulletin-germany.org.
----------

Hoffi
16.10.2007, 19:39
$r ist einfach eine kleine TMP-Var. ;)

Ich arbeite lieber mit einem Return... ich mag diese vielen returns in einer Funktion nicht.. *schauder*

Surviver
16.10.2007, 19:53
Ja, aber durch die Returns wird die Funktion früher wieder beendet -> Sollte die Performance schonen :)

Boothby
16.10.2007, 20:44
$r ist einfach eine kleine TMP-Var. ;)

Ich arbeite lieber mit einem Return... ich mag diese vielen returns in einer Funktion nicht.. *schauder*


Ja, aber durch die Returns wird die Funktion früher wieder beendet -> Sollte die Performance schonen :)Jo, find ich auch, wenn es Zeit ist Tschüß zu sagen, dann sollte man es sofort tun. Dient imho auch der Übersichtlichkeit.