Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Einrückung bei rekursivem Funktionsaufruf?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Einrückung bei rekursivem Funktionsaufruf?

    Hallo!

    Ich habe hier ein tolles Skript welches mir die Verzeichnisse und Dateien ausgibt. Es funktioniert , aber eins stört mich total. Die dritte Ebene hat die gleiche Einrückung (hier also 20px) wie die zweite Ebene.
    Ich habe leider keine Idee wie ich eine schöne Einrückung je nach Verzeichnistiefe erreichen kann, da ich ja nie weiß auf welcher Ebene ich mich gerade befinde.
    Weiß jemand wie man das macht?

    PHP-Code:
    <?

        function show_directory_tree($directory="data"){
            $content = "";

            foreach (scandir($directory) as $file){
                if ($file != "." && $file != ".." && $file != ".DS_Store"){
                    if(is_dir($directory.'/'.$file)){
                        $directoryArray[] = $file;
                    } else {
                        $fileArray[] = $file;
                    }
                }
            }

            /* Ordner ausgeben */
            if (isset($directoryArray)){
                foreach ($directoryArray as $row){
                    $content .= "$row<br />";
                    $content .= "<span style='padding-left:20px;'>";
                    $content .= show_directory_tree($directory."/".$row);
                    $content .= "</span>";
                }
            }

            /* Dateien ausgeben */
            if (isset($fileArray)){
                foreach($fileArray as $row){
                    /* Dateinamen ohne Dateiendung anzeigen */
                    $file_info = pathinfo($directory."/".$row);
                    $filename = $file_info["filename"];
                    /* Dateinamen verlinken */
                    $content .= "<a href='$directory/$row'>$filename</a><br />";
                }
            }

            return $content;
        }

    ?>

  • #2
    Die Einrücktiefe der Funktion mit geben (als zweiten Parameter) ...
    Current Projects: http://www.welten-buch.de, http://neu.zooadoo.de

    Kommentar


    • #3
      Oder HTML-Listenelemente verwenden, Blockelemente statt inline-spans tuns auch.

      Kommentar


      • #4
        Leider verstehe ich eure Hinweise nicht.
        Problem ist ja, dass die Funktion rekursiv aufgerufen wird, ich aber nicht weiß auf welcher Verzeichnisebene sich die Schleife gerade befindet. Deshalb kann ich ja nirgendwo sagen wie groß die Einrückung sein soll.

        Kommentar


        • #5
          Zitat von Geromel Beitrag anzeigen
          Die Einrücktiefe der Funktion mit geben (als zweiten Parameter) ...
          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Wär cool wenn jemand den Code abändern könnte, damit ich verstehe wie es aussehen soll.

            Kommentar


            • #7
              Zitat von Joe1981 Beitrag anzeigen
              Wär cool wenn jemand den Code abändern könnte, damit ich verstehe wie es aussehen soll.
              Nö. Ich habe hier ein tolles Script, funzt nich wie ich will, macht mal ist hier uncool.

              Vom Grundsatz muß auch beim Aufruf die Einrücktiefe aufaddiert werden.
              Ansatz:
              PHP-Code:
              function test(..,$deep=20){
                 :
                 
              test(...,$deep+20);

              Kommentar


              • #8
                okay, habe es abgeändert. das funktioniert aber nur für den ersten verschachtelten ordner. wenn danach einer kommt der weniger stark verschachtelt ist, dann ist der abstandswert zu hoch, da er ja zwischenzeitlich nicht wieder auf null gesetzt werden kann.

                PHP-Code:
                function show_directory_tree($directory="data",$deep=20){
                        
                $content "";

                        foreach (
                scandir($directory) as $file){
                            if (
                $file != "." && $file != ".." && $file != ".DS_Store"){
                                if(
                is_dir($directory.'/'.$file)){
                                    
                $directoryArray[] = $file;
                                } else {
                                    
                $fileArray[] = $file;
                                }
                            }
                        }

                        
                /* Ordner ausgeben */
                        
                if (isset($directoryArray)){
                            foreach (
                $directoryArray as $row){
                                
                $content .= "$row<br />";
                                
                $content .= "<span style='padding-left:".$deep."px;'>";
                                
                $content .= show_directory_tree($directory."/".$row,$deep+=20);
                                
                $content .= "</span>";
                            }
                        }

                        
                /* Dateien ausgeben */
                        
                if (isset($fileArray)){
                            foreach(
                $fileArray as $row){
                                
                /* Dateinamen ohne Dateiendung anzeigen */
                                
                $file_info pathinfo($directory."/".$row);
                                
                $filename $file_info["filename"];
                                
                /* Dateinamen verlinken */
                                
                $content .= "<a href='$directory/$row'>$filename</a><br />";
                            }
                        }

                        return 
                $content;
                    } 

                Kommentar


                • #9
                  okay, habe es abgeändert. das funktioniert aber nur für den ersten verschachtelten ordner
                  Gut, dann finde heraus warum und ändere es Streng dich doch selbst mal an.. von nichts kommt nichts.

                  Zitat von jspit
                  Ich habe hier ein tolles Script, funzt nich wie ich will, macht mal ist hier uncool.
                  The string "()()" is not palindrom but the String "())(" is.

                  Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                  PHP.de Wissenssammlung | Kein Support per PN

                  Kommentar


                  • #10
                    Verstehe die Antwort jetzt nicht. Wenn ich von selbst drauf kommen würde wäre ich ja nicht hier.

                    Kommentar


                    • #11
                      Ok, dann ev. so: Was hast du seit der letzten Änderung (# oben alles schon versucht um darauf zu kommen warum es nicht so will wie du? (Und ich meine nicht die Änderung/Ergänzung selbst).

                      -> Hast du schon nach dem konkreten Grund gesucht, warum es nicht geht? Ja/Nein?
                      --> Ja: Behebe ihn wenn du kannst, wenn nicht nenne ihn hier konkret.
                      --> Nein: Warum nicht? Mach das mal.
                      The string "()()" is not palindrom but the String "())(" is.

                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar


                      • #12
                        Noch ein Hinweis:
                        span ist ein Inline-Element, wirkt also nur in der aktuellen Zeile. Wenn du per Funktionsaufruf nun mehrere Zeilen ausgibst, kannst du nicht erwarten das die alle eingerückt sind.
                        Da ist noch etwas mehr zu tun, wenn du beim span bleiben möchtest.

                        Kommentar


                        • #13
                          Juhuu! Danke, jspit. Es lag am span ... da die Ausgabe ja verschachtelt wird muss es ein div sein. Eine deep-Variable brauche ich gar nicht.

                          Kommentar


                          • #14
                            Bitte. Noch einfacher wird es mit Listenelementen, wie von Durin anfangs schon vorgeschlagen wurde.

                            Kommentar

                            Lädt...
                            X