php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
Alt 20.06.2011, 12:38  
Neuer Benutzer
 
Registriert seit: 20.06.2011
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
nina befindet sich auf einem aufstrebenden Ast
Standard [Erledigt] Variable Variablen in Klassen

Hallo,

ich möchte einen Menübaum mit Daten aus einer Datenbank aufbauen.
Dafür habe ich eine Klasse erstellt.
Leider muss ich das erste Level aus Daten außerhalb der DB, so dass ich Teile des Arrays schon gefüllt habe.

Nun möchte ich den Index des vorhandenen Arrays in die Funktion übergeben, welche den weiteren Menübaum erstellen soll.
Leider scheitere ich daran.
Ich habe Probleme mit den variablen variablen, diese scheinen korrekt übergeben zu werden, doch kann PHP sie scheinbar nicht finden.

Hier das ganze als Test:
PHP-Code:
class MenuArray {
    
    public 
$tree = array ();
    
    public function 
__construct() {
    
    }

    public function 
getGroup($treePos) {
        
        echo 
"Test1:".$this->tree[0]['MARKENID']."<br>";
        echo 
"Test2:".$$treePos."<br>";
        
        
    }
    
    function 
createStructur(){
        
        
$this->tree [0] ['MARKENID'] = 19;
        
$this->tree [0] ['MARKENNAME'] = "MARKENNAME 1";
        
$this->tree [1] ['MARKENID'] = 23;
        
$this->tree [1] ['MARKENNAME'] = "MARKENNAME 2";
        foreach(
$this->tree as $index=>$elem){
            
//GRUPPEN///////////////////////////////////////////
            
$this->getGroup("\$this->tree[$index]['MARKENID']");
        }
        
    }
}

$Menu = new MenuArray();
$navigation $Menu->createStructur(); 
Ausgabe:
Test1:19
Notice
Undefined variable: $this->tree[0]['MARKENID']
Skript: /Applications/MAMP/htdocs/dev.bdboetker.de/bdb/cms/inc/classes/class.MenuArray.php Line: 107
Test2:

Es wäre toll wenn mir jemand weiter helfen könnte.

Gruß Nina
nina ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 20.06.2011, 12:40  
Erfahrener Benutzer
 
Registriert seit: 11.04.2011
Beiträge: 260
PHP-Kenntnisse:
Fortgeschritten
lcrash wird schon bald berühmt werden
Standard

0 gibt's auch gar nicht als Index in dem Array.

// Edit
Jetzt erkenne ich den kranken Gedanken dahinter! BITTE KEINE VARIABLEN VARIABLEN BENUTZEN!

Geändert von lcrash (20.06.2011 um 12:47 Uhr).
lcrash ist offline   Mit Zitat antworten
Alt 20.06.2011, 13:04  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

PHP-Code:
$this->getGroup("\$this->tree[$index]['MARKENID']"); 
Da schüttelt es einen... was soll der Backslash - warum wird das überhaupt als String verpackt?
Du willst den Inhalt einer Variablen, also hol ihn dir auch ohne weitere Umwege:
PHP-Code:
$this->getGroup($this->tree[$index]['MARKENID']); 
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 20.06.2011, 13:35  
Neuer Benutzer
 
Registriert seit: 20.06.2011
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
nina befindet sich auf einem aufstrebenden Ast
Standard

Em, ok also keine variablen variablen.

Wenn ich nun $this->tree an $treePos übergebe, bekomme ich folgende Fehlermeldung:
Warning
Cannot use a scalar value as an array

Gehe ich dann in die Funktion getGroup() und schreibe
PHP-Code:
if (!is_array($treePos)) {
    
$treePos = array();

dann erweitert PHP nicht $this->tree sondern scheint $treePos als eigene Variable zu sehen.


PHP-Code:
class MenuArray {
    
    public 
$tree = array();

    public function 
__construct(){   
       
    }
    public function 
getGroup($topGroup,$markenid,$treePos) {
        
        if (!
is_array($treePos)) {
            
$treePos = array();
        }        
        
        
$sql "SELECT GRUPPENID,PRODUKTGRUPPE,REIHENFOLGE,PARENTID,MARKENID 
                FROM produktgruppen 
                WHERE PARENTID='"
.$topGroup."' 
                AND MARKENID='$markenid' 
                ORDER BY produktgruppen.REIHENFOLGE,produktgruppen.GRUPPENID ASC"
;
        
$result $GLOBALS['DB']->query($sql);
        
        foreach(
$result as $elem) {
        
            if(
$this->hasChildGroups($elem['GRUPPENID'])) {
                
$treePos['level'.$topGroup]['GRUPPENID'] = $elem['GRUPPENID'];
                
$treePos['level'.$topGroup]['PRODUKTGRUPPE'] = $elem['PRODUKTGRUPPE'];
                
$this->getGroup($elem['GRUPPENID'],$markenid,$treePos['level'.$topGroup]);
            } 
            else {
                
$treePos['level'.$topGroup]['GRUPPENID'] = $elem['GRUPPENID'];
                
$treePos['level'.$topGroup]['PRODUKTGRUPPE'] = $elem['PRODUKTGRUPPE'];
            }
        }
        
    }
    
    public function 
hasChildGroups($groupID) {
        
$sql "SELECT GRUPPENID FROM produktgruppen WHERE PARENTID='".$groupID."'";
        
$result $GLOBALS['DB']->query($sql);
        
#
        
if(count($result) > 0){
            return 
true;
        }
        else{
            return 
false;
        }
    }
    
    function 
createStructur(){
        
        
$this->tree [0] ['MARKENID'] = 1;
        
$this->tree [0] ['MARKENNAME'] = "MARKENNAME 1";
        
$this->tree [1] ['MARKENID'] = 2;
        
$this->tree [1] ['MARKENNAME'] = "MARKENNAME 2";
        foreach(
$this->tree as $index=>$elem){
            
//GRUPPEN///////////////////////////////////////////
            
$this->getGroup("0",$elem['MARKENID'],$this->tree[$index]['MARKENID']);
        }
        echo 
"<pre>";print_r($this->tree);echo "</pre>";
    }
    

nina ist offline   Mit Zitat antworten
Alt 20.06.2011, 13:42  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

warum übergibst du an eine Methode der Klasse eine Membervariable als Parameter?

wenn $treepos sowieso $tree annehmen soll, dann kannst du dir den dritten Parameter der Methode auch gleich sparen.

Ich vermute aber, dass deine Fehlermeldung daher resultiert, dass beim allerersten Aufruf wohl $tree ein leeres Array ist - und demzufolge platzsparend "by value" übergeben wird - und NULL ist nunmal ein einzelner Scalar-Wert (wenn auch gleichbedeutend mit "nicht gesetzt" - diesen Fall müsstest du in der Methode eben explizit abfragen und behandeln
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 20.06.2011, 13:55  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Zitat:
Wenn ich nun $this->tree an $treePos übergebe, bekomme ich folgende Fehlermeldung:
Das passiert nirgends...

Zitat:
PHP-Code:
    function createStructur(){
        
        
$this->tree [0] ['MARKENID'] = 1;
        
$this->tree [0] ['MARKENNAME'] = "MARKENNAME 1";
        
$this->tree [1] ['MARKENID'] = 2;
        
$this->tree [1] ['MARKENNAME'] = "MARKENNAME 2";
        foreach(
$this->tree as $index=>$elem){
            
//GRUPPEN///////////////////////////////////////////
            
$this->getGroup("0",$elem['MARKENID'],$this->tree[$index]['MARKENID']);
        }
        echo 
"<pre>";print_r($this->tree);echo "</pre>";
    } 
Du übergibst hier beim Aufruf "getGroup" einen skalaren Wert: $this->tree[$index]['MARKENID']

In "getGroups" einfach mal den Wert ausgeben lassen, dann siehst du schon, was du übergeben hast.
var_dump($treePos);
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 20.06.2011, 14:31  
Neuer Benutzer
 
Registriert seit: 20.06.2011
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
nina befindet sich auf einem aufstrebenden Ast
Standard

@lstegelitz: Danke Du hast Recht.

Das mit dem $tree übergeben war quatsch. Stimmt.
Bleibt aber immer noch das Problem das ich mir irgendwie die Level zusammensetzen möchte.

Neuer Versuch... $this->tree[$markenid]{$level}[$index]['GRUPPENID']
Könnte mir jemand sagen was ich da falsch mache?


PHP-Code:
public function getGroup($topGroup,$markenid,$aktLevel) {
        
        
$i 0;
        
$level "";
        for(
$i 0$i <= $aktLevel$i++){
            
$level .= "['level".$i."']";
        }
        
        
$sql "SELECT GRUPPENID,PRODUKTGRUPPE,REIHENFOLGE,PARENTID,MARKENID 
                FROM produktgruppen 
                WHERE PARENTID='"
.$topGroup."' 
                AND MARKENID='$markenid' 
                ORDER BY produktgruppen.REIHENFOLGE,produktgruppen.GRUPPENID ASC"
;
        
$result $GLOBALS['DB']->query($sql);
                
        foreach(
$result as $elem) {
        
        
            if(
$this->hasChildGroups($elem['GRUPPENID'])) {
                
$this->tree[$markenid]{$level}[$index]['GRUPPENID'] = $elem['GRUPPENID'];
                
$this->tree[$markenid]{$level}[$index]['PRODUKTGRUPPE'] = $elem['PRODUKTGRUPPE'];
                
$this->getGroup($elem['GRUPPENID'],$markenid,$aktLevel+1);
            } 
            else {
                
$this->tree[$markenid]{$level}[$index]['GRUPPENID'] = $elem['GRUPPENID'];
                
$this->tree[$markenid]{$level}[$index]['PRODUKTGRUPPE'] = $elem['PRODUKTGRUPPE'];
            }
        }
        
    } 
Ausgabe:
PHP-Code:
Array
(
    [
0] => Array
        (
            [
MARKENID] => 1
            
[MARKENNAME] => MARKENNAME 1
        
)

    [
1] => Array
        (
            [
MARKENID] => 2
            
[MARKENNAME] => MARKENNAME 2
            
[['level0']] => Array
                (
                    [
0] => Array
                        (
                            [
GRUPPENID] => 14
                            
[PRODUKTGRUPPE] => Snacks
                        
)

                    [
1] => Array
                        (
                            [
GRUPPENID] => 1
                            
[PRODUKTGRUPPE] => Backartikel
                        
)

                )

            [[
'level0']['level1']] => Array
                (
                    [
0] => Array
                        (
                            [
GRUPPENID] => 83
                            
[PRODUKTGRUPPE] => 375 g
                        

nina ist offline   Mit Zitat antworten
Alt 20.06.2011, 14:39  
Erfahrener Benutzer
 
Registriert seit: 01.09.2010
Beiträge: 4.561
PHP-Kenntnisse:
Fortgeschritten
eagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Menscheagle275 ist ein sehr geschätzer Mensch
Standard

jetzt wäre wirklich gut, wenn du mal beschreibst, wie dein erwartetes Ergebnis bei eben diesen Eingangsdaten ausschaut
__________________
"Irren ist männlich", sprach der Igel und stieg von der Drahtbürste
eagle275 ist offline   Mit Zitat antworten
Alt 20.06.2011, 14:49  
Neuer Benutzer
 
Registriert seit: 20.06.2011
Beiträge: 5
PHP-Kenntnisse:
Fortgeschritten
nina befindet sich auf einem aufstrebenden Ast
Standard

Ich hätte gerne ein Array was so aussieht:

PHP-Code:
Array
(
    [
0] => Array
        (
            [
MARKENID] => 1
            
[MARKENNAME] => MARKENNAME 1
        
)

    [
1] => Array
        (
            [
MARKENID] => 2
            
[MARKENNAME] => MARKENNAME 2
            
[level0] => Array
                (
                    [
0] => Array
                        (
                            [
GRUPPENID] => 14
                            
[PRODUKTGRUPPE] => Snacks
                            
[level1] => Array
                               (
                               [
0] => Array
                                  (
                                  [
GRUPPENID] => 83
                                  
[PRODUKTGRUPPE] => 375 g
                                  
[level2] => Array
                                    (
                                       [
0] => Array
                                          (
                                          [
GRUPPENID] => 100
                                          
[PRODUKTGRUPPE] => Brot
                                          

                                       [
1] => Array
                                          (
                                          [
GRUPPENID] => 101
                                          
[PRODUKTGRUPPE] => Eier
                                          

                                  ) 
                               [
1] => Array
                                  (
                                  [
GRUPPENID] => 84
                                  
[PRODUKTGRUPPE] => 400 g
                                  

                            
                        )

                    [
1] => Array
                        (
                            [
GRUPPENID] => 1
                            
[PRODUKTGRUPPE] => Backartikel
                        
)

                ) 
nina ist offline   Mit Zitat antworten
Alt 20.06.2011, 14:52  
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

Zitat:
Code:
  [level0] => Array
                (
                    [0] => Array
                        (
                            [GRUPPENID] => 14
                            [PRODUKTGRUPPE] => Snacks
                            [level1] => A
Das ist doch total unflexibel. Dann musst Du in jeder Stufe die Tiefe wissen, nur um Level abfragen zu können.

Schau Dir bitte das Konzept der Rekursion an.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Antwort


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
Variable aus Text und Variable zusammensetzen monty.x PHP Einsteiger 16 13.04.2011 13:15
Fixe Anzahl als variablen speichern wernersbacher PHP Einsteiger 7 08.03.2011 20:59
PHP5 und Variablen initialisieren kojak2008 PHP Tipps 2010 9 17.08.2010 14:33
[Erledigt] Variable in foreach erweitern ohne zurücksetzen Polliny PHP Tipps 2010 2 23.06.2010 10:13
Variable Variablen zusammen mit Arrays Kenshin PHP Tipps 2008 2 20.04.2008 15:30
unerklärliches Leeren von Variablen KuShi PHP Tipps 2007 2 08.07.2007 15:19
Teil einer Variablen mit einer Variablen ersetzen ? simsalabim PHP Tipps 2007 11 20.03.2007 20:36
Zwei Variablen vor Ausgabe addieren und als Variable ausgebe 022.9 PHP Tipps 2006 6 07.02.2006 15:50
Variable aus Variablen zusammensetzen juhuwoorps PHP Tipps 2007 1 28.11.2005 21:50
Variable mit URL und GET Variablen PHP Tipps 2005-2 2 04.10.2005 22:37
Variablen in Klassen Faebe PHP Tipps 2005 5 07.02.2005 14:42
Variablen übergeben bzw. auslesen? PHP Tipps 2005 4 30.01.2005 03:56
Warum wird Variable nicht übergeben??? Anuschka PHP Tipps 2005 2 06.01.2005 13:22
variablen aus klassen weiterverwenden PHP Tipps 2004 6 05.07.2004 15:01

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php class variablen zusammensetzen, php variable variablen \this\, php klasse name einer variablen aus variablen zusammensetzen, php \variable variablen\, php variable foreach funktion übergeben, dynamische klassenvariable ausgeben php, php variable variablen zusammensetzen klassen, php variable in classe zusamensetzen, php foreach string in variable zusammensetzen, php variable innerhalb der klasse, mysqli in class, php variable in klasse verfügbar, php variable an klasse übergeben, variablen von klassen, php übergebene variable soll nicht auf 0 zurückgesetzt werden, php variable als klassenname, php wert an klasse übergeben, variablenübergabe in klassen, variable aus index.php an klasse, php klassen variable übergabe beispiel

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