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.
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)
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..
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.
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?
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!
Hey, das kannte ich bisher auch noch nicht. Muss ich mir mal im hinterkopf aufbewahren 😛
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 😉