separates Eingabefenster
der henry
- php
Hallo,
ich möchte eine Variable erstellen, die "headline => Überschrift, type => switch or value" und ein Associative Array (beliebige Größe) beinhaltet.
Sitz gerade auf der Leitung ... wie kann so etwas, oder ähnlich realisieren ... ?
$myvar = (
headline => Überschrift
type => switch,
{
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'
}
);
... sonnige Grüße, sitze auf der Terrasse !!!
Hallo der henry,
hast Du eine Syntaxfrage zu PHP? Wenn ja, was hat das mit einem separaten Eingabefenster zu tun?
Grundsätzlich hast Du für ein PHP Array vier Wege, um es zu notieren:
Also
$arr1a = ARRAY(1,2,3);
$arr1b = [ 1, 2, 3 ];
$arr2a = ARRAY("eins" => 1, "zwei" => 2, "drei" => 3);
$arr2b = [ "eins" => 1, "zwei" => 2, "drei" => 3 ];
Wenn ein Arrayeintrag selber ein Array sein soll, kannst Du an Stelle eines normalen Wertes eine dieser vier Schreibweisen für das Unterarray verwenden. Das ist beliebig kombinierbar (d.h. es gibt jetzt 16 denkbare Varianten, aber die schreibe ich nicht alle auf).
$nested1a = ARRAY(1, "zwo", ARRAY("viertel", "vor", "drei") );
$nested1b = [
1,
"zwo",
[
"viertel",
"vor",
"drei",
],
];
$nested2a = ARRAY("eins" => 1, "zwei" => "zwo",
"drei" => ARRAY("viertel", "vor", "drei") );
$nested2b = [
"eins" => 1,
"zwei" => "zwo",
"drei" => [
"distanz" => "viertel",
"bezug" => "vor",
"stunde" => "drei",
],
];
Gerade bei geschachtelten Arrays bevorzuge ich die Variante mit eckigen Klammern. Und ich mache auch hinter das letzte Arrayelement ein Komma, weil ich schon zu oft vergessen habe, es hinzuzufügen, wenn ich ein weiteres Arrayelement ergänzt habe. Neuere PHP Versionen wissen um diese Schusseligkeit und erlauben deshalb ein überflüssiges Komma hinter dem letzten Element. PHP 5 ist darüber noch verstorben.
Rolf
Hallo Rolf,
hast Du eine Syntaxfrage zu PHP? Wenn ja, was hat das mit einem separaten Eingabefenster zu tun?
...das frage ich mich auch, was ich da für einen Gedanken hatte und auch noch niedergeschrieben habe 😂
Mir ging es nur um eine Idee wie ich diese Variable(n) deklarieren könnte
z.B.
$nested2b = [
"eins" => 1,
"zwei" => "zwo",
"drei" => [
"distanz" => "viertel",
"bezug" => "vor",
"stunde" => "drei",
],
[
"distanz" => "viertel",
"bezug" => "vor",
"stunde" => "drei",
],
];
Ich würde es so probieren .. wie ist aber dann der Zugriff ??
$nested2b["eins"] ... ist klar
$nested2b["drei"][0]["distanz"] ... ?????
Vielen Dank für eure Unterstützung.
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:
Zugriffe erfolgen dann mit $myvar['headline'] und $myvar[1]['name'].
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:
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