SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 11.01.2008, 17:13:20
Greenleon Greenleon ist offline
Anfänger
 
Registriert seit: Oct 2006
Beiträge: 110
foreach in Rekursiver funktion

Hallo.

Ich habe fuer ein Script geschrieben, welches mir erlaubt schnell ein verschachteltes Menue zu erstellen.
Bei der Ausgabe des Menus treten allerdings noch fehler auf.
Ich moechte euch vorerst nicht mit dem quelltext belasten weil er lang ist und nur im ganzen zu verstehen.

Das Ergebnis soll ungefaehr so aussehen:

Punkt1
Punkt2
Punkt3
Punkt3.1
Punkt3.2
Punkt3.2.1 (aktiv)
Punkt3.2.2
Punkt3.3
Punkt3.4
Punkt4

verstanden...?

Bei mir gibt er es allerdings folgendermassen aus:

Punkt1
Punkt2
Punkt3
Punkt3.1
Punkt3.2
Punkt3.2.1 (aktiv)


Der Programmablauf sieht im groben so aus.

Das ganze ist eine Funktion mit einem Parameter $i.
Der Parameter $i gibt die Verschachtelungsstufe an (fuer Punkt1 =>0, fuer Punkt1.1 =>1 fuer Punkt1.1.2 =>2, etc)

Die Menupunkte sind alle in einem Array.

per foreach wird das array durchsucht, sobald ein Eintrag der niedrigsten Verschachtelungsstufe gefunden wird wird der ausgegeben. Wenn es sich dabei um ein Elterneintrag der aufgerufenen Seite (in dem Fall Punkt3.2.1) handelt (in dem Fall 3.2 und 3) wird dieser entsprechend gekennzeichnet und die Funktion wird mit $i-1 aufgerufen (falls $i<0).

In meinen Augen sollte das klappen.
Denkt ihr es gibt dort einen Denkfehler? Wenn nicht arbeite ich euch den Quelltext mal auf... vllt hilft der ja.
Mit Zitat antworten
  #2  
Alt 11.01.2008, 17:21:56
Opendix Opendix ist offline
Senior Member
 
Registriert seit: Oct 2004
Ort: Werdenberg / Schweiz
Alter: 35
Beiträge: 1.476
AW: foreach in Rekursiver funktion

Quelltext :P
__________________
Opendix lehnt jegliche Haftung für evtl. vorhandene Fehler in der Grammatik sowie der Satzstellung ab! Bitte wenden Sie sich an die Tastatur!

Betatester gesucht:
Skiclub Gams / CEVI Grabs
Mit Zitat antworten
  #3  
Alt 11.01.2008, 17:32:27
Greenleon Greenleon ist offline
Anfänger
 
Registriert seit: Oct 2006
Beiträge: 110
AW: foreach in Rekursiver funktion

Eine verinfachte Version der Ausgabefunktion. Wenn ich den Fehler hab wird das ganze noch verknappt und verschachtelt!
PHP-Code:
<?
/*
$objekte[]:    Hier ist eine Liste mit den Variablennamen der Seiten gespeichert.

$parent[]:     Hier sind die uebergeordneten Seiten der aufgerufenen Seite gespeichert.
        0 => aktuell aufgerufene Seite
        1 => direkte Eltern-Seite
        2 => Eltern-Eltern-Seite
        ...
        
$i:        Anzahl der Elternseiten der aufgerufenen Seite.
        
Jede Seite ist ein eigenes Objekt.
Fuer uns wichtige Attribute sind:
name: name der Seite
ort: uebergeordnete Seite. Falls die aktuelle Seite keine Eltern-Seite hat ist ort = 'home'.


            
    

    

*/


function menu($i){
    global $objekte;
    global $parent;

        foreach($objekte as $key => $ele){
        global ${$ele};
        

            if(${$ele}->name == $parent[$i-1]){ #Ist $element die aufgerufene Seite?

                echo "Opened: <a href=\"?view=".$key."\">".${$ele}->titel."</a><br>\n"; #offen
                if($i > 0){
                    menu($i-1);
                }
                         //Hier ist leider noch ein kleiner Fehler, er setzt hier nach dem letzten Funktionsaufruf nicht mehr fort!
            }elseif(${$ele}->ort == $parent[$i]){

                echo "Closed: <a href=\"?view=".$key."\">".${$ele}->titel."</a><br>\n"; #geschlossen

            }
        }
}
?>

Geändert von Greenleon (11.01.2008 um 17:34:22 Uhr)
Mit Zitat antworten
  #4  
Alt 12.01.2008, 14:39:43
Greenleon Greenleon ist offline
Anfänger
 
Registriert seit: Oct 2006
Beiträge: 110
AW: foreach in Rekursiver funktion

Hab mal ein gleichwertiges Script gebaut, wodurch das Problem leichter zu finden sein sollte.

Hier ists:
PHP-Code:

<?

//Testwerte
$objekte = array();

$objekte[0] = "S1";
$objekte[1] = "S2";
$objekte[2] = "S3";
$objekte[3] = "S2.1";
$objekte[4] = "S2.2";
$objekte[5] = "S2.2.1";
$objekte[6] = "S2.2.2";
$objekte[7] = "S2.3";
$objekte[8] = "S4";
$objekte[9] = "S5";

$parent = array();

$parent[0] = "S2.2.1";
$parent[1] = "S2.2";
$parent[2] = "S2";
$parent[3] = "home";

$i = 3;

$orte = array();

$orte[0] = "home";
$orte[1] = "home";
$orte[2] = "home";
$orte[3] = "S2";
$orte[4] = "S2";
$orte[5] = "S2.2";
$orte[6] = "S2.2";
$orte[7] = "S2";
$orte[8] = "home";
$orte[9] = "home";


function menu($i){
    global $objekte;
    global $parent;
    global $orte;

        foreach($objekte as $key => $val){
        
            echo "<b>#</b>".$key." <b>Name:</b> ".$objekte[$key]." <b>Ort:</b> ".$orte[$key]."<br>";
        

            if($val == $parent[$i-1]){ #Ist $val die aufgerufene Seite?

                echo "- <b>".$key."</b> ".$objekte[$key]."<br>\n"; #offen
                if($i > 0){
                    menu($i-1);
                }
 
            }elseif($orte[$key] == $parent[$i]){

                echo "+ <b>".$key."</b> ".$objekte[$key]."<br>\n"; #geschlossen

            }
        }
}
menu($i);
?>

Hier wird es ausgefuehrt.
http://test.green-side.de/menu.php
Mit Zitat antworten
  #5  
Alt 12.01.2008, 14:59:10
Greenleon Greenleon ist offline
Anfänger
 
Registriert seit: Oct 2006
Beiträge: 110
AW: foreach in Rekursiver funktion

xD, wenn man sucht, findet man den Fehler auch selber ;-)

Ich hab mich jetzt bestimmt schon 10 Stundne mit dem Problem beschaeftigt.

Was war der Fehler? Ich Idiot hatte den Arraypointer vergessen... Jetzt wird bei jedem Funktionsaufruf ein neues Array erstellt, mit dem namen ${"objekte".$i}. Und siehe da... es geht *freu*
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Foreach in Rekursiver funktion - Hilfe Greenleon PHP Grundlagen 8 15.06.2007 15:59:15
Textfelder per Funktion überprüfen juergen HTML, CSS und JavaScript Help! 2 06.11.2006 02:43:28
Firefox 1.5 Funktion angeblich nicht definiert Andes HTML, CSS und JavaScript Help! 4 28.07.2006 22:55:36
Formularwerte einer Funktion übergeben? wemi PHP für Fortgeschrittene und Experten 6 15.02.2005 09:59:04
Hilfe zu rekursiver Funktion benötigt... Trialrider PHP für Fortgeschrittene und Experten 6 13.02.2004 12:43:36


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:37:06 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt