Ankündigung

Einklappen
Keine Ankündigung bisher.

foreach problem

Einklappen

Neue Werbung 2019

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

  • foreach problem

    hi ich habe ein kleines problem mit meiner foreach schleife...
    und zwar will ich rekursiv alle verzeichnisse auflisten,

    Code:
    class verzeichnisse {
    	
    	
    	## durchsucht verzeichnisse und gibt einen array
    	## gefüllt mit dem verzeichnisbaum zurück
    	function list_dirs($dir) {
    		# Falls der letzte "/" vergessen wurde, anhängen
    		if (substr($dir,(strlen($dir)-1)) != "/") { $dir = $dir."/"; }
    
    		$handle=opendir($dir); 
    		while ($file = readdir ($handle)) { 
    			# "." & ".." sowie versteckte dateien ausschließen
    			# Nur Verzeichnisse werden gelistet
    		   	if ($file != "." && $file != ".." && substr($file,0,1) != "." && is_dir($dir.$file)) {    	
    				$list[] = $file;
    		  	} 
    		}
    		closedir($handle);
    		
    
    		// Verzeichnisliste nach unterverzeichnissen abgrasen:
    		foreach ($list as $key1 => $verzeichnis) {
    		
    		$liste = $this->unterverzeichnis($dir.$verzeichnis);
    			if (is_array($liste)) {
    				
    				foreach ($liste as $key2 => $value) {
    					$list[] = $verzeichnis."/".$value;
    				}
    				
    			}
    
    		}
    
    		return $list;
    	}
    	
    	
    	## durchsucht verzeichnisse und gibt einen array
    	## mit allen gefundenen unterverzeichnissen zurück
    	function unterverzeichnis($dir) {
    		if (substr($dir,(strlen($dir)-1)) != "/") { $dir = $dir."/"; }
    		$handle=opendir($dir); 
    		while ($file = readdir ($handle)) { 
    		   	# Nur Verzeichnisse werden gelistet
    		   	if ($file != "." && $file != ".." && substr($file,0,1) != "." && is_dir($dir.$file)) {    	
    				$list[] = $file;
    		  	} 
    		}
    		closedir($handle);
    		
    		# Falls unterverzeichnisse gefunden diese als array zurückgeben
    		# falls nicht return = false
    		if (is_array($list)) {
    			return $list;
    		} else {
    			return false;
    		}
    	}
    }

    mein problem liegt jetzt darin das es nur eine ebene durchsucht...
    (ich habe mal alles gepostet vielleicht liegt der fehler ja woanders)

    ich glaube das problem liegt an der foreach-schleife
    (die bei "Verzeichnisliste nach unterverzeichnissen abgrasen")

    sie läuft solange bis $list zuende ist, und in der foreach-schleife wird ja nochwas an $list angehängt, also müsste sie ja auch diesen wert durchlaufen, sie geht aber nur solange wie der original $list-array ist und nicht wie der aktuelle (ich hoffe man versteht mich noch)

    kann ich irgendwie die foreach dazu bringen nochmal $list einzulesen damit sie weiterläuft, und die neuen werte in $list auch durchlaufen werden...

    ist nicht gerade der schönste code aber ich poste ja nicht umsonst im anfänger-forum...

    danke für eure hilfe
    gruß mAy


  • #2
    Re: foreach problem

    Zitat von mAy^daY
    und zwar will ich rekursiv alle verzeichnisse auflisten,
    mein problem liegt jetzt darin das es nur eine ebene durchsucht...
    Guck Dir das Beispiel an (Quelltext wird mit angezeigt):
    http://test.php-help.info/dirlist-1/

    Kommentar


    • #3
      danke, ich habe schon mehrere funktionierende versionen,
      aber warum funktioniert meine nicht, liegt es am foreach?

      gruß mAy

      Kommentar


      • #4
        Zitat von mAy^daY
        aber warum funktioniert meine nicht, liegt es am foreach?
        Für ein Debugging Deines Scriptes bin ich zu faul.
        zu kleine Schrift, kein syntaxhighlighting

        Wahrscheinlich machst Du einen Fehler bei der Rekusion (wenn das eine ist).
        EDIT
        nein, das ist keine Rekursion, was Du da veranstaltest.

        is_dir() und is_file() erwarten korrekte Pfade. Sonst sagen die (berechtigt) FALSE

        Kommentar

        Lädt...
        X