Hallo Henry,
Ich würde es so probieren…
So langsam kapiere ich, wo Du hinwillst. Aber dein Ansatz ist ein Gemisch und so nicht richtig. Grundsätzlich gibt es zwei Wege; ich kehre dafür mal zu deinem Eingangsbeispiel zurück.
Möglichkeit 1 ist so, wie Du es eingangs skizziert hast. Ich hatte es da nur nicht ganz kapiert:
- Die erste Ebene von $myvar ist ein Array, das eine Mischung aus assoziativ und indexiert darstellt.
- $myvar['headline'] - String
- $myvar['type'] - String
- $myvar[0] - assoziatives Array
- $myvar[1] - assoziatives Array
Zugriffe erfolgen dann mit $myvar['headline'] und $myvar[1]['name'].
Aus meiner Sicht ist das keine gutes Design
Das Problem ist: Ein Array sollte entweder normal Indexiert oder assoziativ sein. PHP (und auch JavaScript) können beides auch mischen, aber das undurchdachte PHP-Erbe fällt uns wieder mal auf die Füße: count($myvar) liefert in diesem Konstrukt 4, du musst also immer im Hinterkopf haben, dass es außer den numerischen Indexen auch 2 assoziative Einträge gibt und diese abziehen, wenn Du die numerisch indizierten Unterarrays in einer Schleife durchlaufen willst. Das ist ein Bug, der nur darauf wartet, Dir in den Hintern zu beißen. Vor allem bei einer Implementierung mit assoziativen Arrays. In einem echten Objekt könnte man es kapseln, bei Arrays verpestet diese magische 2 deinen ganzen Code.
Deswegen würde ich eine Zusatzebene einziehen:
- Die erste Ebene von $myvar ist ein Array mit genau 3 Einträgen.
- $myvar['headline'] - String
- $myvar['type'] - String
- $myvar['werte'] - Array
- Die zweite Ebene gibt's nur für $myvar['werte'], ein Array mit normalen Indexen
- Die dritte Ebene sind die assoziativen Arrays pro Wert.
Das schreibt man als Literal so:
$myvar = [
"headline" => "Überschrift",
"type" => "switch",
"werte" => [
[
"name" => 'fern_ein', "set" => 1,
"min" => -10, "max" => 30, "unit" => ' cm',
"multi" => 1,
"text" => 'Regler „EIN“', "color" => '#FF9900',
],
[
"name" => 'fern_aus', "set" => 1,
"min" => -10, "max" => 30, "unit" => ' cm',
"multi" => 1,
"text" => 'Regler „AUS“', "color" => '#32CD32',
],
],
];
Zugreifen kannst Du mit $myvar['headline'] und $myvar['werte'][1]['name'].
Rolf
sumpsi - posui - obstruxi