Array: in Kategorie neue Werte hinzufügen ohne Index(x)

Wenn man nicht die richtigen Schlagwörter hat, sucht man sich einen Wolf und findet nichts. Deshalb versuche ich einmal zu beschreiben, was ich mit dem Array machen möchte:

Ich möchte in einem Array in einer Kategorie z.B. „Äpfel“ mehrere Werte schreiben. Die Besonderheit ist, dass dies in einer for-Schleife passiert und der neue Wert z.B. „Sorte $i“ => $Ergebnis.
Wenn ich das so ähnlich mache, dann wird nur der letzte Wert aus der for-Schleife gespeichert. Ich möchte aber alle Werte aus jedem Schleifendurchlauf speichern. Dabei soll es keinen neuen Index geben sondern die Werte einfach hintereinander geschrieben werden. Mit array_push bin ich schon gescheitert, weil es mehrdimensional ist.

Kurz gesagt wie z.B. beim Modul Tibber:

Eine Kategorie und dann alle Werte da direkt drunter ohne jeweils Index(x).

Mit folgender Befehlszeile in einer for_Schleife liefert leider nur den letzten Wert der Schleife.

$Array['Äpfel'] = array('Sorte' =>$Sorte1, 'Menge '=> $Menge);

Wie schreibt man es korrekt?

Irgendwie habe alles was du mit Kategorie &Co scheibst nicht mit einem Array verbinden können, aber ein Array kannst du so befüllen:

for ($i = 1; $i <= 10; $i++) {
    $Aepfel[]= $i;
}
$Obst['Äpfel'] = $Aepfel;
var_dump($Obst);

Michael
PS: ein Array hat immer einen Index. Entweder wie hier Äpfel innerhalb von Obst, oder nummerisch; das Array in dem Index Äpfel

Es fällt mir schwer es genau zu beschreiben was ich eigentlich will, tut mir leid.
Und mir ist gerade aufgefallen, dass ich noch einen Punkt vergessen habe. Ich möchte also schon so wie oben bei dem Beispiel Tibber mehrere Variablen unter einem Index stehen haben. Aber ich möchte auch mehrere Index’ mit jeweils wieder Variablen.
Sprich, im Array „Obst“ gibt es „Äpfel“ mit Menge, Preis und Sorte und „Birnen“ ebenfalls mit Menge, Preis und Sorten.
Woran ich aber konkret scheitere, wenn es bei „Äpfel“ Menge1 und Menge 2 geben soll (for-Schleife). Das ist vielleicht ganz konkret meine Frage.

Also so:

$Array['Äpfel'][] = ['Sorte' =>'Sorte A', 'Menge '=> 5];
$Array['Äpfel'][] = ['Sorte' =>'Sorte B', 'Menge '=>25];

Oder auch, dann aber nicht für eine Schleife:

$Array['Äpfel'] = [
     ['Sorte' =>'Sorte A', 'Menge '=> 5],
     ['Sorte' =>'Sorte B', 'Menge '=>25]
];

Das Schlüsselwort Array habe ich jetzt weggelassen, aktuell nutzt man einfach die eckigen Klammer.
Ist dann vielleicht auch lesbarer und einfach zu verstehen.
Michael

Leider immer noch nicht. :dizzy_face: Das hatte ich schon so geschafft (soll jetzt nicht abwertend klingen), aber ich möchte eben nicht bei Äpfel noch Index(1), Index(2).

Was ich möchte, dass in der Kategorie Äpfel in einer for-Schleife, wo ich jeweils neue Werte für Menge und Sorte bekomme, diese dann direkt hintereinander mit z.B. dem Index der Loopvariable $i als Menge1=4, Menge2=9 … schreiben.

Äpfel

  • Menge1 4
  • Sorte1 Pink Lady
  • Menge2 9
  • Sorte 2 Schneewitchenapfel

Birnen

  • Menge1 7
  • Sorte1 Williams Christ

Dabei kommt der Index hinter Menge und Sorte jeweils vom $i aus der for-Schleife. Wenn ich das aber so versuche, dann durchläuft es zwar die for-Schleife, aber zum Schluss wird nur die letzte Menge und Sorte gespeichert. Aber eben nicht alle vorhergehenden. :thinking:

Vielleicht zeigst du mal deinen Code der klemmt und lässt verrätst uns vielleicht sogar, was du wirklich im Array speichern willst.

Oder noch besser: Was hast du überhaupt grundsätzlich mit den Daten vor? Aus dem Bauch raus: Ein Array ist vollkommen falsch für deine Anforderung.

Es geht um das Tibber Preis_Array.
Auszug:
[{„Ident“:„PT60M_T0_0“,„Price“:29.26,„Level“:„CHEAP“},
„Ident“:„PT60M_T0_1“,„Price“:28.59,„Level“:„CHEAP“},
{„Ident“:„PT60M_T0_2“,„Price“:28.26,„Level“:„CHEAP“},
{„Ident“:„PT60M_T0_3“,„Price“:28.110000000000003,„Level“:„CHEAP“},
…]

Das Array lese ich ein und möchte dort zum einen noch Informationen pro Zeile hinzufügen

$Array=json_decode(getvalue(43671), true);

for ($i = 0; $i <= 2; $i++)   {
    $Price = $Array[$i]['Price'];
    $Pricelevel = $Array[$i]['Level'];

    
switch($Pricelevel)
{
    case 'VERY_CHEAP';
        $Tibber_Preislevel=1;
        break;
    case 'CHEAP';
        $Tibber_Preislevel=2;
        break;
...
    default;
        $Tibber_Preislevel=0;
        break;
}

Gleichzeitig möchte ich es aber auch verschlanken bzw. umbauen, dass ich eine Kategorie „Preislevel“ habe und dort $i=0 bis 23 als Uhrzeit jeweils nur die Wert für den Preis und Preislevel habe.

Preislevel

  • Preis 0 Uhr 25
  • Level 0 Uhr 1
  • Preis 1 Uhr 28
  • Level 1 Uhr 2

Diese Zeile in der for-Schleife bringt dann eben nur den Preis und das Level um 23 Uhr:

$Array_neu['Preislevel'] = array('Preis '.$i. 'Uhr' =>$Price, 'Level '.$i => $Tibber_Preislevel);

In einer weiteren Kategorie dann andere Werte, das ist dann analog das gleiche.

Du willst also kein Array, sondern 2x24 IP-Symcon Variablen entsprechend befüllen. Sonst kannst du sie ja garnicht anzeigen.

Wenn du es doch als Array aufbauen willst, macht es überhaupt keinen Sinn, das kompliziert mit sprechenden Namen zu machen, sondern schön aus Compiler-Sicht mit getrennten Feldern je dargestelltem Wert.

Solltest du weiterhin hier Codebausteine schreiben, stell doch bitte den JSON Part GetValue(43671) mit hier ein. Bitte darauf achten, dass das als ‚vorformartierter Text‘ eingestellt wird.

Ein Array hat immer einen Index!

Vielleicht solltest du auf Foreach umsteigen.
Damit kannst du das Array durchlaufen.
Und wenn du die Variable als Referenz übergibst, kannst du sie auch direkt manipulieren.

foreach($Array as &$Line){
    // Es gibt schon Ident, Price und Level
    $Line['LevelAsInt'] = 2; // wir ergänzen LevelAsInt
}

Michael