Antwort an „Rolf B“ verfassen

Hallo 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:

$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:

$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:

$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
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen