CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
03.06.2007, 21:13:30
|
Anfänger
|
|
Registriert seit: Oct 2006
Beiträge: 110
|
|
Foreach in Rekursiver funktion - Hilfe
Hallo,
Ich habe eine Rekursive Funktion, in der ein Array mit foreach durchlaufen wird...
Mein Problem:
Bei jedem neuen aufruf der Funktion wird auch $key und $element neu definiert, dh. lauft das Foreach nicht mehr weiter, wenn die Durchlaeufe in den neuen Aufrufen in der Funktion durchgelaufen sind... gibt es eine Loesung?
Beispiel:
PHP-Code:
function funktion($i){ foreach($array as $key => $element){ [Befehl mit $key und $element] if($i > 0){ funktion($i-1); } [Wichtiger Befehl, der von $element abhaengt] } }
Geändert von Greenleon (03.06.2007 um 21:15:21 Uhr)
|
03.06.2007, 21:30:29
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
AW: Foreach in Rekursiver funktion - Hilfe
ich hab zwar nicht ganz verstanden, was du willst, da dein skript unvollständig ist, aber vielleicht ist ja dein problem, dass foreach nur mit einer kopie des arrays arbeitet.
daher muss ein konstrukt herhalten, welches ungefähr so aussieht:
PHP-Code:
while(list($key, $val) = each($array)) {
echo "$key => $val<br>";
}
|
03.06.2007, 21:34:22
|
Anfänger
|
|
Registriert seit: Oct 2006
Beiträge: 110
|
|
AW: Foreach in Rekursiver funktion - Hilfe
Das soll ich statt dem foreach nehmen?
Hmm hat auch nicht funktioniert. Vielleich ist das ja auch gar nicht mein Problem. Das ganze ist fuer ein verschachteltes Menu, welches in etwa so aussehen soll:
a>
aa>
ab>
aba>
abb>
ac>
a>
In dem Beispiel waere gerade ab aktiv!
Leider zeigt er es nur so an, macht also wenn er in der untersten Verschachtelung angekommen ist nicht weiter!:
a>
aa>
ab>
aba>
abb>
Geändert von Greenleon (03.06.2007 um 21:45:03 Uhr)
|
03.06.2007, 22:12:24
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
AW: Foreach in Rekursiver funktion - Hilfe
und wie sollen wir dir jetzt weiterhelfen?
|
11.06.2007, 21:24:29
|
Anfänger
|
|
Registriert seit: Oct 2006
Beiträge: 110
|
|
AW: Foreach in Rekursiver funktion - Hilfe
Hier mal das Script:
PHP-Code:
#Objektarray erstellen $objekte = array();
#Klasse definieren class seite{ var $name; #a var $bild; #b var $titel; #c
var $ort = ''; #o function seite($a,$b,$c){ $this->name = $a; $this->bild = $b; $this->titel = $c; global $objekte; $objekte[] = $a; } function zuordnen($o){ global $objekte; $this->ort = $o; } }
#Seiten hinzufuegen (0,1,2,3,4,5,etc.) $haupt = new seite("haupt","kp","Haupt");
$hallo = new seite("hallo","kp","Hallo"); $du = new seite("du","kp","Du"); $sack = new seite("sack","kp","Sack"); $test = new seite("test","kp","test");
#Seiten zuordnen $haupt->zuordnen('home'); $hallo->zuordnen('haupt'); $du->zuordnen('hallo'); $sack->zuordnen('hallo'); $test->zuordnen('haupt');
#Falls nicht uebergeben, view definieren if(!isset($view)){ $view = 0; }
#Uebergeordnete Seiten erfassen $i = 0; $parent[0] = ${$objekte[$view]}->name; if(${$objekte[$view]}->ort != ''){ $parent[$i+1] = ${$objekte[$view]}->ort; while(${$parent[$i]}->ort != 'home'){ $i++; $parent[$i] = ${$parent[$i-1]}->ort; } }
#Funktion zur Darstellung des Menues function menu($i){ global $objekte; global $parent; if($parent[1] != ''){ global $objekte; global $parent; echo " <ul class=\"unterpunkt\">\n"; foreach($objekte as $key => $element){ global ${$element}; if(${$element}->name == $parent[$i-1]){ echo " <a href=\"index.php?view=".$key."\"><li>".${$element}->titel."</li></a>\n"; if($i > 0){ menu($i-1); } }elseif(${$element}->ort == $parent[$i]){ echo " <a href=\"index.php?view=".$key."\"><li>".${$element}->titel."</li></a>\n"; } } echo " </ul>\n"; } }
Wichtig ist nur die letzte Funktion, da der Rest funktioniert... wenn noch Fragen sind, bitte stellen!
Gruss leon
Geändert von Greenleon (15.06.2007 um 15:00:18 Uhr)
|
14.06.2007, 21:22:49
|
Anfänger
|
|
Registriert seit: Oct 2006
Beiträge: 110
|
|
AW: Foreach in Rekursiver funktion - Hilfe
Ich schreib nochmal was dazu... ab morgen kann ich nichts mehr aendern... war fuer den Informatikunterricht, hab aber noch ne 1- bekommen. Also falls euch noch die Loesung einfaellt.
schaut es euch doch bitte mal an!
Das Problem hab ich ja geschildert, ist aber auch einfach zu bemerken.
Gruss Leon
|
14.06.2007, 23:54:34
|
|
Junior Member
|
|
Registriert seit: Mar 2006
Beiträge: 415
|
|
AW: Foreach in Rekursiver funktion - Hilfe
Was steht denn in $objekte alles drin?
Vielleicht mal nen var_dump?
__________________
Bitte sprich entweder deutsch oder englisch mit mir, aber nicht beides gleichzeitig.
----------
Bitte vor dem Fragen lesen: Wie man Fragen richtig stellt.
|
15.06.2007, 14:40:40
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: Foreach in Rekursiver funktion - Hilfe
Zitat:
Zitat von Greenleon
war fuer den Informatikunterricht, hab aber noch ne 1- bekommen.
|
a. toll, daß man sich jetzt schon um die Hausaufgaben kümmern darf.
b. noch toller ist, daß Du für den Quark auch noch ne 1- bekommen hast.
|
15.06.2007, 14:59:15
|
Anfänger
|
|
Registriert seit: Oct 2006
Beiträge: 110
|
|
AW: Foreach in Rekursiver funktion - Hilfe
Es geht mir nicht um die Note! Die 1 hatte ich sowieso sicher, es geht mir um das Script. Wenn du es schon als Quark bezeichnest, so sag doch bitte auch was genau so schlecht ist. Ich will doch nur lernen!
Gruss Leon
@z0iD: Sorry, Objekte ist ein Array mit allen Objektnamen der Klasse 'seite', hatte ich vergessen zu kopieren.
Also das ganze funktioniert super, bis auf die Tatsache, dass das Foreach nichts mehr macht, wenn die unterste Verschachtelung erreicht und abgeschlossen ist. (Sorry, bin noch nicht so vertraut mit der Fachsprache ;-) )
Geändert von Greenleon (15.06.2007 um 15:38:26 Uhr)
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 09:45:20 Uhr.
|