PHP dynamische Variablenerzeugung
bearbeitet vonHallo Henry,
> Hierzu habe ich gelesen, das man Variablen auch dynamisch erzeugen kann.
Aber nicht sollte. Das ist ein Unfall, der darauf wartet, zu passieren. Wenn Du Daten unter einem namentlichen Schlüssel ablegen willst, tu es im sicheren Namespace eines assoziativen Arrays. Die lassen sich beliebig tief schachteln.
> Undefined variable $T1.drehzahl
Du hast - zumindest in deinem Code - nirgends etwas an ${'T1.drehzahl'} zugewiesen. Sondern an $$nameString. Was da drin steht, verrätst Du nicht. Es muss was drinstehen, sonst hätte PHP gemeckert, dass $nameString undefiniert wäre.
Zu meiner Überraschung funktioniert dieser Code, in PHP 5.6, 7.4 und 8.3:
~~~php
$name = "T1.drehzahl";
$$name = 17;
echo ${'T1.drehzahl'};
~~~
`T1.drehzahl` ist kein erlaubter Variablenname, deshalb meine Überraschung.
Aber auch wenn das geht, tu es nicht. Wieso baust Du überhaupt das Array in einer Temp-Variablen mit dynamischem Namen zusammen? In deiner Logik würdest Du auch den plcvarname zu den Werten verlieren. Ich würde es eher so machen:
~~~php
$array[] = $row;
~~~
In $array stünde dann, nach 2 Rows:
~~~
[
[
"plcvarname" => "T1.drehzahl",
"unit" => "U/min",
"actValue" => 50000
],
[
"plcvarname" => "T1.temperatur",
"unit" => "°C",
"actValue" => 47
]
]
~~~
Alternativ kannst Du das Array auch mit dem plcvarname schlüsseln:
~~~php
$array[$row['plcvarname']] = $row;
~~~
Dann bekämest Du:
~~~
[
"T1.drehzahl" => [
"plcvarname" => "T1.drehzahl",
"unit" => "U/min",
"actValue" => 50000
],
"T1.temperatur" => [
"plcvarname" => "T1.temperatur",
"unit" => "°C",
"actValue" => 47
]
]
~~~
Der Unterschied ist, dass json_encode Dir mit Variante 1 ein JSON-Array baut und mit Variante 2 ein Objekt. Das Objekt macht Dir im JavaScript vielleicht sogar das Leben leichter.
_Rolf_
--
sumpsi - posui - obstruxi