theresa: variable als variablenbezeichnung für array

hi leute!

hier mein code:

  
$y = 0;  
foreach ($allfiles as $file)  
{  
 foreach ($gesamt as $einzel)  
 {  
  $varbez = 'bild'.$y;  
  $$varbez[$x] = $einzel['dateiname'];  
  $x++;  
 }  
}  

leider ist $bild0 nicht nur leer, es gibt sie nichteinmal,
sagt zumindest: if($bild0){echo "ok";}.
denk ich da irgendwie falsch oder steh ich aufm schlauch?
danke für eure hilfe!

die thersa

  1. hi leute!

    hier mein code:

    $y = 0;
    foreach ($allfiles as $file)
    {
    foreach ($gesamt as $einzel)
    {
      $varbez = 'bild'.$y;
      $$varbez[$x] = $einzel['dateiname'];
      $x++;
    }
    }

      
    Also Du solltest jedenfalls vor Deiner Schleife mal $x initialisieren.  
      
    Viele Gruesse,  
    der Bademeister
    
    1. Also Du solltest jedenfalls vor Deiner Schleife mal $x initialisieren.

      mach ich bereits, hab ich beim kopieren vergessen. :(

      danke,
      die theresa

  2. hi leute!

    hier mein code:

    $y = 0;
    foreach ($allfiles as $file)
    {
    foreach ($gesamt as $einzel)
    {
      $varbez = 'bild'.$y;
      $$varbez[$x] = $einzel['dateiname'];
      $x++;
    }
    }

    
    >   
    > leider ist $bild0 nicht nur leer, es gibt sie nichteinmal,  
    > sagt zumindest: if($bild0){echo "ok";}.  
    > denk ich da irgendwie falsch oder steh ich aufm schlauch?  
    > danke für eure hilfe!  
    >   
    > die thersa  
      
    Hallöchen,  
      
    Nach "$varbez = 'bild'.$y;" enthält $varbez einen String. Und zwar bei jedem Schleifendurchlauf einen anderen.  
      
    Mit "$varbez[$x]" greifst du auf das $x-te Zeichen davon zu. Damit hast du nach "$$varbez[$x] = $einzel['dateiname'];" (und $x ist zu dem Zeitpunkt 0) die Variable $b mit dem Inhalt $einzel['dateiname'].  
      
    Probier mal  
    ~~~php
      
      foreach ($gesamt as $einzel)  
      {  
    //   $varbez = 'bild'.$y;  
       $varbez[$x] = 'bild'.$y;  
       $$varbez[$x] = $einzel['dateiname'];  
       $x++;  
      }  
      
    
    

    MfG
    vaudi

    1. Probier mal

      foreach ($gesamt as $einzel)
        {
      //   $varbez = 'bild'.$y;
         $varbez[$x] = 'bild'.$y;
         $$varbez[$x] = $einzel['dateiname'];
         $x++;
        }

      Hmm, ändert leider auch nichts bei mir...  
        
      Danke aber für den hilfreichen und vor allem informativen Input,  
      das war mir so nicht klar!  
        
      lg,  
      Theresa
      
  3. hab das problem nun mit einem kleinen workaround gelöst.
    danke für eure hilfe!

    die theresa

    1. Mahlzeit theresa,

      hab das problem nun mit einem kleinen workaround gelöst.

      ... den Du allerdings vergessen hast zu posten, damit der nächste, der das gleiche oder ein ähnliches Problem hat und im Archiv sucht, gleich einen Lösungsansatz findet.

      danke für eure hilfe!

      Danke für Deinen Beitrag zum Archiv.

      MfG,
      EKKi

      --
      sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  4. echo $begrüßung;

    $varbez = 'bild'.$y;
      $$varbez[$x] = $einzel['dateiname'];

    leider ist $bild0 nicht nur leer, es gibt sie nichteinmal,
    sagt zumindest: if($bild0){echo "ok";}.
    denk ich da irgendwie falsch oder steh ich aufm schlauch?

    Beim Entwickeln von PHP ist es grundsätzlich von Vorteil, das error_reporting auf E_ALL stehen zu haben. Damit bekommt man Zugriffsfehler auf nicht vorhandene Variablen angezeigt. Das hilft dir hier, um beim Leseversuch von $bild0 zu erkennen, dass es diese Variable nicht gibt. Weiterhin ist für Kontrollausgaben var_dump() eine sehr hilfreiche Funktion.

    Eine generelle Vorgehensweise bei Problemen wie deinem, wäre, sich nach dem Anlegeversuch einen Überblick über alle Variablen zu verschaffen. Das geht mit print_r($GLOBALS) oder var_dump($GLOBALS), aber nur für globale Variablen. Für lokale Variablen innerhalb von Funktionen gibt es das leider nicht so einfach[*]. Damit kannst du sehen, was für Variablen angelegt sind und dabei erkennen, dass irgendwas schief läuft und vielleicht auch schlussfolgern, warum das so ist.

    [*] Alle lokal vorhandenen Variablen erhält in einem benutzerdefinierten Error-Handler mit einem mit trigger_error() oder anderweitig ausgelösten Fehler.

    echo "$verabschiedung $name";

    1. echo $begrüßung;

      $varbez = 'bild'.$y;
        $$varbez[$x] = $einzel['dateiname'];

      leider ist $bild0 nicht nur leer, es gibt sie nichteinmal,
      sagt zumindest: if($bild0){echo "ok";}.
      denk ich da irgendwie falsch oder steh ich aufm schlauch?

      Beim Entwickeln von PHP ist es grundsätzlich von Vorteil, das error_reporting auf E_ALL stehen zu haben. Damit bekommt man Zugriffsfehler auf nicht vorhandene Variablen angezeigt. Das hilft dir hier, um beim Leseversuch von $bild0 zu erkennen, dass es diese Variable nicht gibt. Weiterhin ist für Kontrollausgaben var_dump() eine sehr hilfreiche Funktion.

      Eine generelle Vorgehensweise bei Problemen wie deinem, wäre, sich nach dem Anlegeversuch einen Überblick über alle Variablen zu verschaffen. Das geht mit print_r($GLOBALS) oder var_dump($GLOBALS), aber nur für globale Variablen. Für lokale Variablen innerhalb von Funktionen gibt es das leider nicht so einfach[*]. Damit kannst du sehen, was für Variablen angelegt sind und dabei erkennen, dass irgendwas schief läuft und vielleicht auch schlussfolgern, warum das so ist.

      [*] Alle lokal vorhandenen Variablen erhält in einem benutzerdefinierten Error-Handler mit einem mit trigger_error() oder anderweitig ausgelösten Fehler.

      echo "$verabschiedung $name";

      Hallöchen,

      prinzipiell stimme ich mit dedlfix überein, hab aber noch 2 ergänzende Bemerkungen:

      1. var_dump() ist nach meinem Kenntnisstand keineswegs auf globale Variable beschränkt, sondern kann ebenso den Inhalt jedes x-beliebigen Arrays anzeigen (auch mehrdimensionale).

      2. Weis nicht, wie gut sich die theresa mit Arrays auskennt. Aber da sie hier offensichtlich eine variable Anzahl Variablen erzeugt, würde ich ein assoziatives Array vorziehen:

      $x = 0;
         $AlleNamen = array();

      foreach ($allfiles as $file)
      {
      foreach ($gesamt as $einzel)
      {

      $AlleNamen['bild'.$x] = $einzel['dateiname'];

      $x++;
      }
      }

        
      Vorteile wären:  
      - Nur eine (überprüfbare) Variable mit bekanntem Namen statt x Variablen.  
      - count($AlleNamen) repräsentiert die Anzahl der ermittelten Dateinamen  
      - Was gefunden wurde, kann mit var\_dump($AlleNamen) sichtbar gemacht werden.  
        
      Der Zugriff auf die einzelnen Dateinamen wäre dann  
      nicht   $bild0               (gezwungenermaßen statisch)  
      sondern $AlleNamen['bild0']  (ist auch statisch)  
      oder    $AlleNamen['bild'.$x](dynamisch, z.B. in einer weiteren Schleife)  
        
      Und bei letzterer Variante kann mit if($x < count($AlleNamen)) einem Griff ins Leere vorgebeugt, bzw. dieser bei entsprechender Definition einer for-Schleife von vornherein vermieden werden.  
        
      Hoffe das ist verständlich...  
        
      MfG  
      vaudi
      
      1. echo $begrüßung;

        Eine generelle Vorgehensweise bei Problemen wie deinem, wäre, sich nach dem Anlegeversuch einen Überblick über alle Variablen zu verschaffen. Das geht mit print_r($GLOBALS) oder var_dump($GLOBALS), aber nur für globale Variablen. Für lokale Variablen innerhalb von Funktionen gibt es das leider nicht so einfach[*]. Damit kannst du sehen, was für Variablen angelegt sind und dabei erkennen, dass irgendwas schief läuft und vielleicht auch schlussfolgern, warum das so ist.

        1. var_dump() ist nach meinem Kenntnisstand keineswegs auf globale Variable beschränkt, sondern kann ebenso den Inhalt jedes x-beliebigen Arrays anzeigen (auch mehrdimensionale).

        Das Problem ist auch nicht die Funktion var_dump() sondern in dem Fall der Inhalt von $GLOBALS. Der enthält nur globale Variable. Es gibt zu $GLOBALS kein Pendant für lokale Variablen.

        1. Weis nicht, wie gut sich die theresa mit Arrays auskennt. Aber da sie hier offensichtlich eine variable Anzahl Variablen erzeugt, würde ich ein assoziatives Array vorziehen:

        Ja, eine Sammlung von Werten in einem strukturierenden Element (Array) halte ich auch für besser als einzelne Variablen. Ein Array kann man beispielsweise mit foreach durchlaufen, bei einzelnen Variablen ist das deutlich umständlicher.

        echo "$verabschiedung $name";