Frage zu "variablen" Variablen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
LuLa
Mitglied
Beiträge: 290
Registriert: 14.02.2004 12:26

Frage zu "variablen" Variablen

Beitrag von LuLa »

Hallo,

habe mal eine Frage.

Code: Alles auswählen

var_1 = 'Test 1';
var_2 = 'Test 2';
var_3 = 'Test 3';
funktioniert natürlich, aber ...

Code: Alles auswählen

for ($i = 0; $i < 3; $i++)
{
	$var_[$i] = 'Test ' . [$i];
}
funktioniert nicht. Was habe ich falsch gemacht?
var_'[$i]' und var_"[$i]" habe ich schon ausprobiert, leider ohne Ergebnis.


LG
LuLa
Zuletzt geändert von LuLa am 15.01.2008 11:34, insgesamt 1-mal geändert.
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Das funktioniert schon - die Variablen sind dann im Array $var_ gespeichert.
Wenn du variablen Variablennamen verwenden willst, musst du mit $$ arbeiten und den Variabelnamen in einer Variable speichern:

Code: Alles auswählen

$test = 1;
$name = 'test';
$$name++;
echo $test; // Ausgabe: 2
Gruß, Philipp
Kein Support per PN!
Der Sozialstaat ist [...] eine zivilisatorische Errungenschaft, auf die wir stolz sein können. Aber der Sozialstaat heutiger Prägung hat sich übernommen. Das ist bitter, aber wahr. (Horst Köhler)
Meine Mods
Benutzeravatar
LuLa
Mitglied
Beiträge: 290
Registriert: 14.02.2004 12:26

Beitrag von LuLa »

Danke für die schnelle Antwort. Aber leider funktioniert es noch nicht.

Code: Alles auswählen

<?php

for ($i = 0; $i < 3; $i++)
{
   $var_[$i] = 'Test ' . [$i] . '<br />';
   echo $var_[$i];
}

?>
Parse error: syntax error, unexpected '[' in test.php on line 5

Ebensowenig funktioniert das doppete Dollarzeichen, es erscheint dieselbe Fehlermeldung.

Code: Alles auswählen

   $$var_[$i] = 'Test ' . [$i] . '<br />';
   echo $$var_[$i];
Kannst Du bitte nochmal nachschauen woran es liegt? Die Ausgabe sollte eigentlich

Test 1
Test 2
Test 3


sein. Vielleicht habe ich mein Problem auch undeutlich erklärt. Es kommt mir darauf an, daß ich als Ergebnis drei eigenständige Variablen habe, nämlich $var_1, $var_2 und $var_3.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Das liegt aber in keiner Weise an den $$ oder der Arraykonstruktion sondern einfach nur daran, dass du [$i] nicht einfach so verwenden darfst, sondern das nur in Verbindung mit einem Array eine Bedeutung hat. Wenn du nur den Wert in $i benutzen willst und den nicht als Index für das Array verwenden willst, dann lass die Klammern weg.

Code: Alles auswählen

 $$var_[$i] = 'Test ' . [$i] . '<br />';
   echo $$var_[$i]; 
wird übrigens nicht so funktionieren wie du dir das denkst, weil du das Prinzip nicht verstanden hast.

$$var greift auf die Variable zu, deren Name in $var gespeichert ist.
Beispiel:

Code: Alles auswählen

$var = 'var1';
$var1 = 4;
$var2 = 5;
echo $$var; //gibt 4 aus
Diese Methode ist allerdings extrem unübersichtlich, da man dem Code nicht direkt ansieht worauf man gerade zugreift.
Wenn du in der anderen Methode einfach den Syntaxregeln entsprechend

Code: Alles auswählen

 . [$i] . 
durch

Code: Alles auswählen

 . $i . 
ersetzt, dann sollte auch dieses Beispiel einwandfrei funktionieren. Dass das der Fehler ist geht auch schon aus der Fehlermeldung hervor, schließlich wird eine Klammer bemängelt und nicht z.b. ein Text oder eine Variable.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
LuLa
Mitglied
Beiträge: 290
Registriert: 14.02.2004 12:26

Beitrag von LuLa »

Danke, aber das hat mir nicht weitergeholfen. Deshalb frage ich mal anders:

wie bekomme ich 300 Variablen die mit 'var_' beginnen und einer aufsteigenden Zahl enden mit der Zeichenkette 'Test' befüllt, ohne 300 mal "$var_i = 'Test';" schreiben zu müssen?


LG
LuLa
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Warum muss es denn umbedingt var_1 bis var_300 sein?

Arrays sind wie für so einen Zweck gemacht :D

Löse das doch über Arrays: :D

Code: Alles auswählen

<?php
for ($i = 0; $i < 300; $i++)
{
$var[$i] = "Test";
}

//Was wird wol rauskommen?
echo "<pre>"; // <pre> sorgt für eine "schöne" Ausgabe, für Leute die nicht den Seitenquelltext anschauen können...
var_dump($var);
echo "</pre>";

// Arrays beginnen beim Key 0
?>
So wird das dann aussehen:
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
BB-BF-BM
Mitglied
Beiträge: 2179
Registriert: 28.10.2005 16:38
Wohnort: Essen

Beitrag von BB-BF-BM »

Alternativ (auch wenn ich ebenfalls Arrays vorziehe):

Code: Alles auswählen

for ($i = 1; $i <= 300; $i++)
{
	${'var_'.$i} = "Test ".$i;
}
Benutzeravatar
LuLa
Mitglied
Beiträge: 290
Registriert: 14.02.2004 12:26

Beitrag von LuLa »

BB-BF-BM hat geschrieben:Alternativ (auch wenn ich ebenfalls Arrays vorziehe):

Code: Alles auswählen

for ($i = 1; $i <= 300; $i++)
{
	${'var_'.$i} = "Test ".$i;
}
Funktioniert leider nicht, Fehlermeldung wie oben...
Boecki91
Ehemaliges Teammitglied
Beiträge: 4744
Registriert: 18.06.2006 15:21

Beitrag von Boecki91 »

Und meine Variante?

Funktioniert sie?

Werde ich geschickt ignoriert? :D
Standart: Am besten mit beiden Beinen auf dem Boden
Standardmäßig antworte ich nicht auf PMs
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

LuLa hat geschrieben:Danke, aber das hat mir nicht weitergeholfen. Deshalb frage ich mal anders:

wie bekomme ich 300 Variablen die mit 'var_' beginnen und einer aufsteigenden Zahl enden mit der Zeichenkette 'Test' befüllt, ohne 300 mal "$var_i = 'Test';" schreiben zu müssen?


LG
LuLa
Vielleicht postest du mal den kompletten Code den du verwendet hast wo es Fehler gab? Ich glaube nämlich nicht dass es an meiner Änderung lag, [$i] ohne Array / Variable ist nämlich außer in einem String an sämtlichen Stellen falsch wo es steht.

Das hier muss funktionieren:

Code: Alles auswählen

for ($i = 1; $i <= 300; $i++)
{
   $var = 'var_'.$i;
$$var = "Test ".$i;
}
ich wüsste allerdings trotzdem gerne was du bei meinen Beispielen gemacht hast, denn die sollten ebenfalls richtig sein.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

Zurück zu „Coding & Technik“