Antwort an „Rolf B“ verfassen

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