php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 13.11.2005, 21:27  
Benutzer
 
Registriert seit: 18.11.2004
Beiträge: 56
Gumfuzi
Standard Array in rekursiver Funktion auslesen

Hallo!

Ich habe eine rekursive Funktion, welche alle Sub-Ordner eines Ordners ausliest und in einen Array ($folder) speichert.
Jedoch wird der Array immer wieder gelöscht (?), sobald sich die Funktion selbst aufruft.
PHP-Code:
function show_all_files($ordner$links 0$sub FALSE)
{
  
$handle opendir($ordner);
  while (
$file readdir ($handle)) {
    if(
$file != "." && $file != "..") {
      if(
is_dir($ordner."/".$file)) {
          
$c++;
        
$folder[$c] = $ordner.'/'.$file;
        
$folder[$c] = str_replace(".//"""$folder[$c]);
        
show_all_files($ordner."/".$fileTRUE);
      }
    }
  }
  
closedir($handle);
  return 
$folder;

Wie mache die den Array "$folder" auch außerhalb der Funktion verfügbar?
(ich will einfach die einzelnen Werte in einem Array haben)
Gibt es da einen Weg?
Falls es nur bei normalen Variablen (Strings) geht, dann könnte man ja die Daten mit einem Trennkennzeichen aneinanderfügen und ausserhalb der Funktion wieder mit "strtok" zerteilen, oder?

Wer kann mir da helfen bzw. einen Tipp geben? Wäre sehr dankbar!
Gumfuzi ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 13.11.2005, 21:55  
Erfahrener Benutzer
 
Registriert seit: 02.03.2005
Beiträge: 305
DerDesian
Standard

Ein einfacher Tipp ohne tief in deine spezielle Rekursion einzusteigen wäre:

Die Funktion kann einen Rückgabewert haben!
Auch rekursiv.
Kann man irgendwie zusammenschmeißen.
Habs bis dato nur als String in virtuellen Filesystemen gebraucht.
Code, wenn die entsprechenden Funktionen implementiert sind:
PHP-Code:
<?php
function getPath($folder) {
    if(
$folder->isRoot()) {
        return 
'/';
    } else {
        return 
Folder::getPath($folder->getParent()).$folder->name.'/';
    }
}
?>
Raus kommt dann zB so ein String '/home/desian/downloads/'
Mit ein wenig Creativität lässt sich auch irgendwir ein Array daraus schmieden. Wie gesagt, ich habs bis dato nur noch nie gebraucht.

Gruß
Der Desian
__________________
Wenn dich was ankotzt, machs besser.
DerDesian ist offline  
Alt 13.11.2005, 22:51  
Gast
 
Beiträge: n/a
Standard Re: Array in rekursiver Funktion auslesen

Zitat:
Zitat von Gumfuzi
Jedoch wird der Array immer wieder gelöscht (?), sobald sich die Funktion selbst aufruft.
Das kann eigentlich nicht sein. Vor allem wird das Ergebnis der Funktion ja in den leeren Raum geschickt.

Zitat:
Zitat von Gumfuzi
Wie mache die den Array "$folder" auch außerhalb der Funktion verfügbar?
Entweder den Rückgabewert der Funktion einer Variablen zuweisen (<?php $folder = show_all_files(); ?>) oder in der Funktion mit einer globalen Variable arbeiten, was in Deinem Fall aber wenig Sinn macht (<?php global $folder; ?>).


Vielleicht?
PHP-Code:
<?php
glob
($ordner.'/*'GLOB_ONLYDIR);
?>
 
Alt 14.11.2005, 10:45  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard Re: Array in rekursiver Funktion auslesen

Zitat:
Zitat von Gumfuzi
PHP-Code:
function show_all_files($ordner$links 0$sub FALSE)
{
  
//..
        
show_all_files($ordner."/".$fileTRUE); // wieso speicherst du den Return-Wert nicht?
  // ..
  
return $folder// musst ihn dir schon merken ^^

Zergling-new ist offline  
Alt 14.11.2005, 20:05  
Benutzer
 
Registriert seit: 18.11.2004
Beiträge: 56
Gumfuzi
Standard

Ich sammle mal ein paar Gedanken:

Das
PHP-Code:
<?php
$folder 
show_all_files()
?>
speichert im $folder den rückgabewert (was ich aber nur durch "return $folder" zurückbekomme). Ist es dann auch ausserhalb der Funktion verfügbar? (auch rekursiv?).
Die $folder wird aber dann auch jedesmal überschieben, oder? Da wäre es am besten, die $folder danach gleich in eine nicht von der Funktion verwendeten Variable zu speichern, bevor die Funktion wieder aufgerufen wird (rekursiv), zB. "$output[$c]"?
Aber dann wäre die "$output[$c]" nach Ende der Funktion wieder leer bzw. nicht aufrufbar, d.h. ich muss ein "global" devorsetzten - muss ich das nur einmal davorsetzten oder jedesmal, wenn ich den Array anspreche?
Gumfuzi ist offline  
Alt 14.11.2005, 20:47  
Gast
 
Beiträge: n/a
Standard

Hier mal ein kurzes Beispiel, vielleicht hilft es:
PHP-Code:
function show_all_files($path '.'$sub FALSE) {
  
$files glob($path.'/*');
  if (
is_array($files)) {
    
$dc 0;
    foreach (
$files  as $file)
      if (
is_dir($file)) {
        
$folder['dirs']['name'][$dc++] = basename($file);
        if (
$sub)
          
$folder['dirs']['subs'][$dc-1] = show_all_files($fileTRUE);
      }
      else {
        
$folder['files'][] = basename($file);
      }
    return 
$folder;
  }
  return 
FALSE;
}

$folder show_all_files('.',TRUE);
print_r($folder); 
 
Alt 14.11.2005, 21:23  
Benutzer
 
Registriert seit: 18.11.2004
Beiträge: 56
Gumfuzi
Standard

Super, danke!
Die Variablen werden übergeben, allerdings bräuchte ich die als eindimensionalen Array, d.h. mit $folder[1], $folder[2], etc. der Reihe nach.

die "files" im else-Bereich habe ich mal ausgeklammert, da ich nur die Ordner brauche, aber in Form des ganzen Pfades relativ zum Ausgangsordner. Die sollen dann nämlich der Reihe nach in einer anderen Funktion bearbeitet werden.

Wie kann ich das machen?
Gumfuzi ist offline  
Alt 14.11.2005, 21:39  
Gast
 
Beiträge: n/a
Standard

Vielleicht so ähnlich?
PHP-Code:
<?php
function show_all_files($path '.'$sub FALSE) {
  
$files glob($path.'/*'GLOB_ONLYDIR);
  if (
is_array($files)) {
    foreach (
$files  as $file) {
      
$folder['dirs'][] = $file;
      if (
$sub)
        
$folder['subdirs'][$file] = show_all_files($fileTRUE);
    }
    return 
$folder;
  }
  return 
FALSE;
}

$folder show_all_files('..',TRUE);
print_r($folder);
?>
/edit:
Glaub doch nicht!?

Was meinst du genau mit:
Zitat:
Zitat von Gumfuzi
allerdings bräuchte ich die als eindimensionalen Array, d.h. mit $folder[1], $folder[2], etc. der Reihe nach.
 
Alt 14.11.2005, 21:45  
Benutzer
 
Registriert seit: 18.11.2004
Beiträge: 56
Gumfuzi
Standard

Ist schon besser, aber dennoch mehrdimensional, ich würde gerne die einzelnen Ordner als Array $folder[$c] abrufen können (mit einer Schleife, die das $c immer um eins erhöht, wobei die Schleife nicht das Prob ist )

Danke für Deine Mühen!
Gumfuzi ist offline  
Alt 14.11.2005, 21:46  
Gast
 
Beiträge: n/a
Standard

Mit Unterordnern eindimensional?

Oben noch folgendes einfügen:
PHP-Code:
$folder = array(); 
 
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Verzeichnis auslesen -> Dateinamen in Array quoba PHP Tipps 2008 11 29.04.2008 16:21
XML datei auslesen und in array schreiben PHP Tipps 2006 10 27.09.2006 13:58
Zweidimensionales Array auslesen u wieder in Array schreiben Lobo PHP Tipps 2006 7 20.04.2006 11:37
Übersicht aus mehrdimensionalem Array erzeugen Crypi PHP-Fortgeschrittene 0 30.01.2006 13:44
Array Formatierung PHP Tipps 2006 3 17.01.2006 19:12
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
Array aus MySQL auslesen und permutieren? PHP Tipps 2005-2 2 24.07.2005 14:11
Array in Session speichern und wieder auslesen Riot PHP Tipps 2005-2 3 08.07.2005 11:43
Assoziatives Array auslesen phpwiki PHP Tipps 2005 4 21.04.2005 13:27
Behandlung Rückgabe von Typ Array einer Funktion PHP Tipps 2005 5 10.01.2005 02:33
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25
Array Funktion gesucht PHP Tipps 2004 2 06.10.2004 21:57
Array auslesen Filewalker PHP Tipps 2004 3 28.09.2004 16:33
bbcode - Classe PHP-Fortgeschrittene 4 18.09.2004 17:30

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php array rekursiv auslesen, http://www.php.de/php-tipps-2007/33709-array-rekursiver-funktion-auslesen.html, array rekursiv auslesen php, php verzeichnis rekursiv auslesen array, php glob rekursiv, array php rekursiv auslesen, php verzeichnisse rekursiv auslesen und in array speichern, php array rekursiv durchlaufen, php rekursives array auslesen, php function \return array\ wert abrufen, verzeichnis rekursiv auslesen und in mehrdimensionales array speicher, php function return array, php assoziatives array rekursiv ausgeben, php5 rekursiv variablen auslesen, php verzeichnis rekursiv auslesen und in array speichern, verzeichnis rekursiv auslesen und in array speichern, php rekursiv array lesen, array rekursiv durchlaufen c, array rekursiv durchlaufen, php array funktionen

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:41 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.