php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.07.2007, 13:07  
Erfahrener Benutzer
 
Registriert seit: 20.06.2003
Beiträge: 233
andrew22
Standard Funktions Problem mit Array

Hi,

habe eine Funktion geschrieben die Ordner + Dateinamen in ein Array schreibt welches ich später auslesen möchte.

Allerdings klappt da noch etwas nicht -> schon in der Funktion bekomme ich auf mein Array einen "Notice: Undefined variable" hmmmm

Code:
$aFileNames = array();
                        
            function get_dir ($dir, $cnt = false, $dirname = false)
            {                                    
                    
                $fp=opendir($dir);
                $i = 1;
                
                while($datei=readdir($fp))
                {
                    if (is_dir("$dir/$datei") && $datei!="." && $datei!="..")
                    {                                          
                        $aFileStructure[$i] = $datei;                        
                        get_dir("$dir/$datei", $i, $aFileStructure);                        
                        $i++;
                    }
                    else
                    {    
                        
                        if($datei!="." && $datei!="..")                           
                            $aFileNames[$dirname[$cnt]][] = $datei;
                                                                                       
                    }                    
                    
                }
                print_r($aFileNames);
                            
                closedir($fp);
                                
                return $aFileNames;     
                
            }                
                 
            $aFiles = get_dir($sStartDir);                
            print_r($aFiles);
Irgendwie schein ich da mein Array zu überschreiben so das es nicht mehr exisitert verdammt ich seh nicht mehr durch
andrew22 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 03.07.2007, 13:23  
Erfahrener Benutzer
 
Registriert seit: 13.08.2007
Beiträge: 1.976
KingCrunch befindet sich auf einem aufstrebenden Ast
KingCrunch eine Nachricht über ICQ schicken KingCrunch eine Nachricht über AIM schicken KingCrunch eine Nachricht über MSN schicken KingCrunch eine Nachricht über Yahoo! schicken
Standard

Wo tritt denn der Fehler genau auf?
__________________
Nicht jeder Fehler ist ein Bug.
KingCrunch ist offline  
Alt 03.07.2007, 14:31  
Erfahrener Benutzer
 
Registriert seit: 20.06.2003
Beiträge: 233
andrew22
Standard

das Array $aFileNames ist leer bei der übergabe ...

das print_r funktioniert noch doch unmittelbar danach bekomme ich die Notice Meldung ...
andrew22 ist offline  
Alt 03.07.2007, 14:46  
Erfahrener Benutzer
 
Benutzerbild von DER_Brain
 
Registriert seit: 18.04.2005
Beiträge: 1.541
PHP-Kenntnisse:
Fortgeschritten
DER_Brain ist zur Zeit noch ein unbeschriebenes Blatt
Standard

$aFileNames ist -denke ich- in der Funktion nicht bekannt,
$sStartDir wird wohl im laufe des scripts irgendwo deklariert, oder?


mfg
Andi
DER_Brain ist offline  
Alt 03.07.2007, 15:25  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Schön, dass du die Fehlermeldung da abgeschnitten hast, wo sie die Variable beim Namen nennen möchte. Welche ist es denn nun?

Weder $aFileNames noch $aFileStructure werden vor der Schleife und innerhalb der Funktion als Array deklariert. Wird also innerhalb der Schleife kein Element in eine der Variablen geschrieben, sind sie danach nicht deklariert und somit "unbekannt".

Du bist hier wohl durcheinander gekommen mit "global" und return-Angaben.
Merk dir einfach, dass in einer Funktion nur die Variablen zur Verfügung stehen, die sie als Parameter erhalten hat. Keine einzige sonst. Umgekehrt gilt das gleiche: in einer Funktion deklarierte und verwendete Variablen werden nach der Funktionsausführung verworfen.
Ausnahmen sind per "global" in die Funktion importierte Zugriffsrechte auf außerhalb liegende Variablen, Funktions-Parameter die per Referenz übergeben wurden sowie Super-Globalen.

Demnach ist Zeile 1 "$aFileNames = array();" auch sinnlos, da die Variable innerhalb der Funktion nicht bekannt und außerhalb nicht weiterverwendet wird.
Zergling-new ist offline  
Alt 03.07.2007, 15:43  
Erfahrener Benutzer
 
Registriert seit: 20.06.2003
Beiträge: 233
andrew22
Standard

Code:
$aFiles = array();
        $aFileStructure = array();
        $aFileNames = array();
               
                 
            
            $sStartDir = "test";
                        
            function get_dir ($dir, $aFileStructure, $aFileNames, $cnt = false, $dirname = false)
            {                                    
                    
                $fp=opendir($dir);
                $i = 1;
                
                while($datei=readdir($fp))
                {
                    if (is_dir("$dir/$datei") && $datei!="." && $datei!="..")
                    {                                          
                        $aFileStructure[$i] = $datei;                        
                        get_dir("$dir/$datei", $i, $aFileStructure);                        
                        $i++;
                    }
                    else
                    {    
                        
                        if($datei!="." && $datei!="..")                           
                            $aFileNames[$dirname[$cnt]][] = $datei;
                                                                                       
                    }                    
                    
                }
                
                //print_r($aFileNames);
                            
                closedir($fp);
                                
                return $aFileNames;     
                
            }                
                 
            $aFiles = get_dir($sStartDir, $aFileStructure, $aFileNames);                
            print_r($aFiles);
nun bekomme ich aber auch nur ein leeres Array zurück
andrew22 ist offline  
Alt 03.07.2007, 15:50  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von Zergling
Merk dir einfach, dass in einer Funktion nur die Variablen zur Verfügung stehen, die sie als Parameter erhalten hat. Keine einzige sonst. Umgekehrt gilt das gleiche: in einer Funktion deklarierte und verwendete Variablen werden nach der Funktionsausführung verworfen.
[..]
Demnach ist Zeile 1 "$aFileNames = array();" auch sinnlos, da die Variable innerhalb der Funktion nicht bekannt und außerhalb nicht weiterverwendet wird.
Manchmal habe ich das Gefühl mit Kindergartenkindern zu kommunizieren. Jetzt mach es entweder so wie ich gesagt habe oder sag, was du nicht verstanden hast!
Zergling-new ist offline  
Alt 03.07.2007, 16:01  
Erfahrener Benutzer
 
Registriert seit: 20.06.2003
Beiträge: 233
andrew22
Standard

Hey mag sein das ich momentan nicht ganz so fit bin ...

Aber ein Kindergartenkind bin ich noch lange nicht ...

Ich verstehe es nicht ! um es mal so auszudrücken ..

ich habe eine Funktion - in dieser Funktion mache ich etwas z.B. schreibe ich Content in eine VARIABLE / ARRAY wie auch immer und mit return übergebe ich diese Variable ...

Code:
function test($a){

$return[] = $a;

return $return;

}
Hier habe ich auch keine Definition ausserhalb der Funktion und trotzdem funktioniert das ...

Also muss ich ehrlich gestehen ich steh im Dunkeln mit meiner Funktion etc.

Deshalb hoffe ich hier auf Hilfe
andrew22 ist offline  
Alt 03.07.2007, 16:06  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Cool down, Zergling! So warm ist's doch gar nicht... (jedenfalls bei uns)

Im zweiten CodePosting (falls es nicht nachträglich editiert wurde) sind die Angaben doch sinnvoll.

Er initialisiert $aFiles, $aFileStructure und $aFileNames jeweils als leeres Array. Ist doch in Ordnung.
Das Problem dürfte eher darin liegen, dass die Funktion rekursiv aufgerufen wird, ohne die Parameter als Referenzen anzugeben. Damit werden die Parameter nicht zurückgegeben und lediglich der erste Funktionsdurchlauf zurückgegeben. Alternativ müßte der return Wert beim Aufruf von get_dir () in get_dir ausgewertet werden.
Überhaupt ist diese Mischung aus referentieller Übergabe und return etwas verwirrend und ich würde letzteres weglassen.
nikosch ist gerade online  
Alt 03.07.2007, 16:48  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hm peinlich wenn man sich über andere beschwert, dabei aber den selben Murgs verbricht. Entschuldigung dafür andrew22!
Kommt aber zu oft vor, dass Postings einfach nicht verstanden werden und dann einfach erstmal ignoriert werden. Verstehe ich zwar nicht, denn draußen macht man das auch nicht und im Forum kann man auch nicht behaupten etwas nicht mitbekommen zu haben. Nagut anderes Thema, also schnell zurück zum Thema.

nikosch77 hat die Problematik wohl als einzigster erkannt. Bin nicht sicher was du eigentlich als Ergebnis haben möchtest, einen Strukturbaum mit Liste der Ordner und Dateien mit nachgebildeter Tiefe?
Zergling-new ist offline  
 


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
Array Problem dsmcg PHP Tipps 2006 3 07.12.2006 14:34
ARRAY: alle möglichen Kombinationen Tentacle PHP Tipps 2006 13 12.05.2006 00:18
Array Problem accomm PHP Tipps 2006 1 04.04.2006 16:35
Mysql / Array Problem marcels PHP Tipps 2006 10 23.03.2006 18:30
Problem mit array in Datenbank pixelcut PHP-Fortgeschrittene 3 28.02.2006 18:20
array - Problem skaterboy PHP-Fortgeschrittene 4 26.02.2006 12:36
Übersicht aus mehrdimensionalem Array erzeugen Crypi PHP-Fortgeschrittene 0 30.01.2006 13:44
Problem mir einem Array PHP Tipps 2005-2 5 11.08.2005 11:33
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
Sortieren von Arrays mit mehr als 2 Dimensionen (Teil 2) Buhmann PHP-Fortgeschrittene 4 12.07.2005 14:03
Array Problem [Ansatz ?] PHP Tipps 2005 0 27.01.2005 18:24
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
Problem mit Checkboxvalues in Array PHP Tipps 2004 1 17.09.2004 15:00
Array Problem andrew22 PHP Tipps 2004 9 17.09.2004 10:41


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:36 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.