Dynamische Variablennamen

Ich programmiere ja gerne und viel mit PHP. Heute hatte ich das Problem, dynamische Variablennamen erzeugen zu müssen.

Der Fall

Bei einer Anmeldung zu einer Veranstaltung gibt der Besucher neben den Kontaktdaten und seinem eigenen Namen und seiner E-Mail-Adresse auch die Anzahl der Teilnehmer an. Das war bisher schon so und bedarf auch keiner Änderung.

Das Neue

Im Anschluß an diese Buchung, soll es nun die Möglichkeit geben, dass eine Prüfung abgelegt werden kann. Um später die Urkunden drucken zu können, bedarf es nun aller einzelnen Namen und E-Mail-Adressen der Prüfungsteilnehmer.

Die übrigen Daten übernehme ich ganz simpel aus dem vorherigen Formular, um dem Kunden doppelte Eingaben zu ersparen.

Die Lösung

PHP bietet – und das wußte ich bisher garnicht – die einfache Möglichkeit, dynamische Variablennamen zu erzeugen.

Ein Beispiel:

  for($x=1; $x<=10; $x++)
  {
     ${variable.$x} = $x;
  }#for

erzeugt die Variablen mit den zugehörigen Wertzuweisungen «$variable1 = 1«, «$variable2 = 2« usw.

Damit konnte ich ganz einfach aus der vorher eingegebenen Teilnehmerzahl die entsprechende, maximale Anzahl an Prüfungsteilnehmern generieren, die dann mit den entsprechenden Daten ausgefüllt werden. Den ersten Prüfling habe ich dann auch schon voreingetragen, mit den Personendaten aus dem vorigen Formular. Wenn dieser nicht geprüft werden soll/will kann man dort ja ganz einfach andere Daten eintragen.

Stefan Moeller Verfasst von:

7 Comments

  1. 14. Oktober 2005
    Reply

    Vielen herzlichen Dank ! Du hast mir – ohne Übertreibung – extrem aus der Patsche geholfen, ich benötigte dynamische Variablennamen um Felder auszulesen, deren Anzahl variabel war – super Sache, bist mein Held 😉

  2. macgoofy
    24. November 2005
    Reply

    Hey, das kannte ich bisher auch noch nicht. Muss ich mir mal im hinterkopf aufbewahren 😛

  3. 2. Dezember 2005
    Reply

    Wow… danke! ich kannte es schon von früher… habs aber irgendwie nicht hinbekommen… bis ich dein beispiel gesehen habe! hat mir sehr geholfen und zeit gespart!

  4. jeremias
    14. November 2006
    Reply

    Hallo,

    is schon was älter, ich weiß, aber mir ist nicht klar, für was man sowas braucht?
    um felder eines formulares auslesen zu können, werden die felder als array deklariert

    name=”name[]” value=”text1”
    name=”name[]” value=”text2”
    name=”name[]” value=”text3”
    etc…

    Dein Problem, lieber Autor, würde sich auch ganz einfach via array lösen lassen, zumal die ausgabe dann auch viel leicht ist

    foreach ($arr as $data)

    echo ”$data”;

    Könntest du, auch wenn es schon was älter ist, mal etwas näher erklären für was man dynamische variablen namen brauch?

  5. 14. November 2006
    Reply

    Es ist tatsächlich schon etwas älter und ich weiß nicht mehr 100%-ig, worum es da ging. Allerdingst ist neu für mich, dass man Formularfeldern ein Array als Namen geben kann. Das macht die Sache oben natürlich in dieser Hinsicht überflüssig. Danke für den Tipp.

    Momentan fällt mir dann hier auch kein Beispiel mehr ein, wo das Ganze noch Sinn machen würde.

  6. Creo
    22. Januar 2007
    Reply

    apropos älter .. Willkommen in 2007,
    also mir hat das damals (siehe 1. Beitrag) echt geholfen,
    damals wusste ich aber selbst auch noch nicht dass es Möglich ist Arrays zu verwenden – so gesehn, hey – keine Frage, Arrays sind die beste Möglichkeit .. und dynamische Variablennamen könnte man als “Workaround” sehn..

  7. Daniel
    29. März 2007
    Reply

    Ich geb euch ein Beispiel, genau dafür brauche ich “dynamische Variablen” nämlich grade (daher bin ich auch über diesen Eintrag gestolpert!).

    Ich habe eine Datenbankabfrage auf 50 Felder (teil_1_berechtigung1, teil_2_berechtigung2 usw.). Nun nöchte ich anhand einer anderen Abfrage (teil_2_recht1, teil_2_recht2 usw) bestimmte Bedingungen abfragen.

    Ich kann relativ einfach die Arrays gegeneinander stellen, um die Schnittmenge zu bilden, sprich was für Berechtigungen gibt es, und welche Berechtigungen hat jemand tatsächlich.

    $modul_rechte = array_values(array_intersect($BERECHTIGUNGEN,$RECHTE));

    Aber damit ich nicht jedes Mal alle 50 Möglichkeiten hart kodiert hinterlegen muss, baue ich mir “variable Variablen”:

    Um dein Beispiel aufzugreifen:

    for($x=0; $x < count($modul_rechte) ; $x++)
    {
    echo “teil_1_”.strtolower($modul_moeglichkeiten[$x]);
    if (${teil_1_.strtolower($modul_rechte[$x])} == ‘checked’){
    $test[] = ${teil_1_.strtolower($modul_rechte[$x])};
    }
    }#for

    Klappt fein, spart mir ne Menge Tipparbeit (oder Copy & Paste) und der Code bleibt an sich übersichtlicher (sofern ich in 3 Monaten noch weiß was ich da gebaut habe… gg)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.