# string mit einer Variable zu einer Variable verbinden



## bastiang (8. März 2005)

wie kann ich eine Variable mit einem String verbinden das sich darauß eine Variable ergibt und diese Variable dann ausgeben.?


----------



## Gumbo (8. März 2005)

Deine Beschreibung klingt nach variablen Variablen, Ähnliches ist auch mit der eval()-Funktion zu erreichen.


----------



## Timbonet (9. März 2005)

Vielleicht solltest du mal einen Blick ins Referenzhandbuch werfen, elementare Dinge werden dort schon behandelt..

```
$variable2 = $variable1."String";
echo $variable2;
```


----------



## ChrisPB (19. Juni 2006)

Hallo zusammen,

ich komme echt nicht weiter... ich brauche folgendes:

In einer For-Schleife soll etwas aus der DB geholt werden und jedes mal
einer fortlaufenden Variablen übergeben werden. Dabei wird der Variablen
hinten immer eine neue Zahl angehängt. Beispiel:


```
for($i=0; $i<10; i++){

  ...sql querry...

  $data.$i .= ...sql...

}
```

An der Stelle, wo $data.$i steht, soll dann nach 10 Schleifendurchgängen
immer die Variable nach diesem Schema generiert werden: $data1, $data2, ...

Ich hab mir auf php.net verschiedenste Dinge angeguckt und ausprobiert,
aber klappt nicht so wie ich es mir vorstelle..

Kann mir jemand vllt den entscheidenden Tipp geben?


----------



## Sven Mintel (19. Juni 2006)

Machs so:*${'data'.$i}*


----------



## Dennis Wronka (19. Juni 2006)

Wenn ich mich recht erinnere sollte Dir da *$data{$i}* helfen koennen.

Ach Mensch Sven, musst Du nachher nicht arbeiten?


----------



## Sven Mintel (19. Juni 2006)

Dennis Wronka hat gesagt.:
			
		

> Ach Mensch Sven, musst Du nachher nicht arbeiten?



Rat mal, wo ich grad herkomme :-(

Übrigens: dein Vorschlag erzeugt ein Array-Element


----------



## Dennis Wronka (19. Juni 2006)

Sven Mintel hat gesagt.:
			
		

> Übrigens: dein Vorschlag erzeugt ein Array-Element


Hmm, ich nutze das eigentlich in meinem Firewall-Config-Script, und ich mein das wuerde genau das gewuenschte machen.

```
$chain_copy=$fw_chain_{$chains[$_GET['chain']]};
```

Hmm, grad mal getestet, und Tatsache. Da werd ich wohl mein Script mal anpassen muessen.


----------



## Gumbo (19. Juni 2006)

Sven Mintel hat gesagt.:
			
		

> Übrigens: dein Vorschlag erzeugt ein Array-Element


Ich denke eher, dass mit $data{$i} auf das $ite Zeichen der Zeichenkette $data zugegriffen wird (siehe Zugriff und Modifikation von Zeichen in Strings).


----------



## Dennis Wronka (19. Juni 2006)

Vielleicht ist dies der Fall wenn $i eine Zahl darstellt.
In meinem Script jedoch handelt es sich dabei um die Namen von Firewall-Ketten, wie z.B. INPUT oder POSTROUTING.

Und vorhin hatte ich so getestet:

```
$a=5;
$b{$a}=10;
echo $b[5];
```
Ausgabe: 10
Und das ist ja auch mehr als ein Zeichen. Dementsprechend tendiere ich auch zu den Arrays.
Wenn ich mich recht erinnere hab ich einzelne Zeichen in Strings eher wie Arrays angesprochen, also $my_string[4];
Beispiel:

```
$my_string='hallo';
for ($x=0;$x<strlen($my_string);$x++)
{
 echo $my_string[$x];
}
```
Sollte eigentlich *hallo* ausgeben wenn ich mich grad nicht taeusche.


----------



## Matthias Reitinger (19. Juni 2006)

Hallo,



			
				Dennis Wronka hat gesagt.:
			
		

> Und vorhin hatte ich so getestet:
> 
> ```
> $a=5;
> ...


Ja, in dem Fall ist $b ein waschechtes Array. Initialisiert man $b allerdings vorher mit einem String (z.B. $b = 'foobar';), so wird nur das entsprechende Zeichen mit Index $a verändert.



> Wenn ich mich recht erinnere hab ich einzelne Zeichen in Strings eher wie Arrays angesprochen, also $my_string[4];


Solltest du dir aber eher abgewöhnen  Das ist nämlich seit PHP 4 „deprecated“ und wird nur noch wegen Kompatiblitätszwecken unterstützt.

Zum eigentlichen Thema: variable Variablennamen kann man in den allermeisten Fällen vermeiden, indem man Arrays einsetzt. Vor allem, wenn es um Variablen mit fortlaufendem Index gehen soll.

Grüße,
 Matthias


----------



## Dennis Wronka (19. Juni 2006)

Matthias Reitinger hat gesagt.:
			
		

> Solltest du dir aber eher abgewöhnen  Das ist nämlich seit PHP 4 „deprecated“ und wird nur noch wegen Kompatiblitätszwecken unterstützt.


In dem Fall dann per {$i} oder so wie ich jetzt eigentlich immer mache ueber substr()?
Ist {$i} auch deprecated oder ist das okay?



			
				Matthias Reitinger hat gesagt.:
			
		

> Zum eigentlichen Thema: variable Variablennamen kann man in den allermeisten Fällen vermeiden, indem man Arrays einsetzt. Vor allem, wenn es um Variablen mit fortlaufendem Index gehen soll.


So richtig fein sind variable Variablennamen ganz sicher nicht. Und frag mich jetzt nicht warum ich mich damals bei dem Script dazu entschieden hab. Wenn ich mir das Script nochmal durchles faellt es mir ja vielleicht nochmal ein.


----------



## Matthias Reitinger (19. Juni 2006)

Hallo,



			
				Dennis Wronka hat gesagt.:
			
		

> In dem Fall dann per {$i} oder so wie ich jetzt eigentlich immer mache ueber substr()?
> Ist {$i} auch deprecated oder ist das okay?


Das beantwortet eigentlich alles die von Gumbo bereits verlinkte Seite des PHP-Manuals.

Grüße,
 Matthias


----------



## Dennis Wronka (19. Juni 2006)

Jetzt bin ich von der Arbeit daheim und hab was Zeit, werd dann mal reinschauen und die Tage mal gucken ob ich irgendwelche Scripts anzupassen hab.


----------



## ChrisPB (19. Juni 2006)

Moin Leute!

Jetzt steh ich aber voll aufm Schlauch  Wie geht das denn nu?


----------



## Sven Mintel (19. Juni 2006)

```
${'data'.$i}
```

Quasi so...Dollarzeichen, danach das geschweifte Klammerpaar...und darin muss dann der Variablenname stehen...welcher auch Ergebnis einer String-Verkettung oder einer sonstigen PHP-Anweisung sein kann.


----------



## ChrisPB (19. Juni 2006)

Also das hab ich probiert, ging nicht. Nochmal probiert, undzwar so:


```
$var1 = "data";
		$var2 = 2;
		$varx = ${'data'.$var2};
		$vary = ${$var1.$var2};
		echo "varx: ".$varx."<br>";
		echo "vary: ".$vary."<br>";
```

Wird einfach für die Variable nichts ausgegeben.


----------



## Gumbo (19. Juni 2006)

Existiert die Variable $data2 denn überhaupt?


----------



## ChrisPB (19. Juni 2006)

Warum sollte diese Variable existieren? Wird doch nirgendswo drauf zugegriffen.


----------



## Gumbo (19. Juni 2006)

Sowohl der Ausdruck ${'data'.$var2} als auch ${$var1.$var2} referenzieren im genannten Kontext die Variable $data2.


----------



## ChrisPB (19. Juni 2006)

Gumbo hat gesagt.:
			
		

> Sowohl der Ausdruck ${'data'.$var2} als auch ${$var1.$var2} referenzieren im genannten Kontext die Variable $data2.




Du hast Recht. Ich hab nicht gewusst, dass man direkt auf die neue Variable zugreifen kann.
Hab das so probiert und geht:


```
$var1 = "data";
		$var2 = 2;
		${$var1.$var2} = "test";
		echo "varx: ".$data2."<br>";
```


----------

