dedlfix: Array

Beitrag lesen

Tach!

Jetzt bleibt noch die letzte Frage, wie ich $UserMonatArray[] = $Monat in $monate = array(3,5,7); bekomme, also die Zahlen sollen dynamisch gefüllt werden.

Du hast das bereits so.

[...] allerdings egal was ich mache ich bekomme die , nicht zwischen die Zahlen.

Oh oh, da fehlen aber ganz gewaltig ein paar Programmiergrundlagen.

$x = array(1, 2, 3);

array(1, 2, 3) ist ein Array-Literal. Ein Literal ist das was man in den Code schreiben muss, um ein bestimmtes Ding zu bekommen. "foo" ist ein String-Literal. 42 ist ein Integer-Literal. Und so weiter und so fort. $a = "foo"; ist eine Anweisung, um die Variable $a mit der Zeichenfolge foo zu belegen. Literale sind festgelegte Schreibweisen für Werte, damit der Parser die verschiedene Dinge die er so in einem Code trifft auseinanderhalten kann.

Die Funktion var_dump() zeigt den Inhalt einer Variable an. Die Ausgabe sieht allerdings ganz und gar nicht wie ein Literal aus. Da sind noch ein paar mehr Informationen drin, die man als PHP-Programmierer gut gebrauchen kann, beispielsweise Typ und Länge. Wenn du eine Literal-Schreibweise haben möchtest, dann musst du var_export() nehmen.

Beim Literal array(1, 2, 3) sind keine Schlüsselwerte angegben, die legt PHP selbst fest. var_dump(array(1, 2, 3)) zeigt die jedoch mit an. Wenn du also eine solche Ausgabe hast:

array(3) {
  [0]=>
  string(1) "3"
  [1]=>
  string(1) "5"
  [2]=>
  string(1) "7"
}

dann ist das zugehörige Literal: array("3", "5", "7"). In dem Fall sind die Werte Strings, in meinen Beispielen waren es Zahlen und die Ausgabe sähe so aus:

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}

(Die Zahlen in Klammern nach dem int sind diesmal keine Längenangabe sondern die Zahlen selbst.)

Wenn ich es richtig verstanden habe, muss ich zuerst ein leeres Array anlegen mit
$Monate[] = "";

Das hast du nicht richtig verstanden. Das Literal für ein leeres Array ist array() oder in aktuellen PHP-Versionen auch [], wenn es allein steht und nicht hinter einer Variablen.

$Monate = array();
$Monate = [];

So werden leere Arrays angelegt und einer Variablen zugewiesen. Beide Zeilen sind gleichbedeutend. Deine Anweisung hat auch ein Array angelegt, aber das passiert nur, wenn $Monate vorher noch nicht als Variable vorhanden war. Dann passiert das Anlegen bei einer Zuweisung nebenbei mit. Dein Array ist außerdem nicht leer sondern mit einem Leerstring als dem ersten Wert angelegt worden. In ordentlich geschrieben entspricht das einem $Monate = array(""); oder auch deutlicher $Monate = array(0 => "");

Dann dachte ich muss es so füllen: array_push($Monate, $UserMonatArray[]);

Man kann array_push() nehmen, aber das ist umständlich zu notieren. Hier hast du aber einen Syntaxfehler. Wenn $variable[] links von einem = steht, dann soll dem Array in der Variable $variable ein Element zugewiesen werden. In allen anderen Fällen ist $variable[] ein lesender Zugriff, und dabei muss zwischen die beiden []-Klammern der Wert eines Schlüssels eingefügt sein, den man auszulesen gedenkt.

Wie fügt man nun Werte zu einem Array in einer Variable hinzu? Nachfolgend die beiden Varianten:

$variable[] = "wert";
array_push($variable, "wert");

dedlfix.