Index und Werte von Array verschieben

Hallo,

ich komme nicht mehr weiter.
Folgendes:
Ich habe ein Array mit 12 Einträgen, je Monat der kw/h Preis für 12 Monate.

In einem anderen Array habe ich auch 12 Einträge (volles Jahr), jeder Eintrag steht hier für die kw/h je Monat.

Ich rechne dann in einer For Schleife die Kosten für jedes Monat aus.
Das funktioniert auch solange ein Jahr mit dem Verbrauch voll ist, z.B. 2023 funktioniert.

Die Werte hole ich mir aus dem Archiv und fülle das Array.
Aktuell sieht es so aus.

Preis pro kw/h
Index 0 ist Dezember und 11 ist Januar

array(12) {
  [0]=>
  float(0.32)
  [1]=>
  float(0.32)
  [2]=>
  float(0.32)
  [3]=>
  float(0.32)
  [4]=>
  float(0.33)
  [5]=>
  float(0.33)
  [6]=>
  float(0.33)
  [7]=>
  float(0.33)
  [8]=>
  float(0.33)
  [9]=>
  float(0.33)
  [10]=>
  float(0.33)
  [11]=>
  float(0.33)

Und hierzu das aktuelle kw/h Array das ja nur bis September voll ist.
Hier ist Index 0 der September, also rechne ich mit falschen Werten.

array(12) {
  [0]=>
  float(64.41015625)
  [1]=>
  float(145.81005859375)
  [2]=>
  float(136.33984375)
  [3]=>
  float(128.27001953125)
  [4]=>
  float(147.68994140625)
  [5]=>
  float(212.050048828125)
  [6]=>
  float(294.2900390625)
  [7]=>
  float(470.06982421875)
  [8]=>
  float(802.650146484375)
  [9]=>
  NULL
  [10]=>
  NULL
  [11]=>
  NULL

Das kw/h Array wird wie folgt befüllt

//Bezug Gesammtheuer monatlich
$gessheuer = AC_GetAggregatedValues($archive, $quelle, 3 /* monatlich*/, mktime(0, 0, 0, 1, 1, $jahrheuer), mktime(23, 59, 59, 12, 31, $jahrheuer), 0);

//array für kwH 12 Monate
if  (!empty($gessheuer)) {
        foreach($gessheuer as $gessheuer_end) {
            $argesammtheuer[]=($gessheuer_end['Avg']); 
        }

Wie kriege ich es hin das ich die Indexe ab Index 11 bis 0 befülle??
Dann würde es funktionieren.

for ($i = 0; $i <=11; $i++) {
    $kosten = ($argesammtheuer[$i] * $reversedTarif[$i]) ;
    $arkosten_gessheuer[] = $kosten;
    } 

$argesammtheuer = kw/h Array
$reversedTarif = Array mit Preis pro Monat

Danke…

Versuch es mal mit foreach :wink: Das funktioniert bei Arrays sehr gut

Das PHP Manual hilft mir immer sehr weiter. In deutsch, bunt und mit vielen Beispielen.
Hier findest alles zu arrays und wie man damit arbeitet. Sehr hilfreich.

1 „Gefällt mir“

Foreach geht nicht, weil die Reihenfolge nicht stimmt.

Habs jetzt anders gelöst, umständlich, aber es funzt.

//Wenn das Jahr noch nicht zu Ende ist sind noch nicht alle Elemente des arras befüllt, die Reihenfolge passt somit
//beim multiplizieren nicht.
//Abhilfe, prüfen ob Startjahr gleich Heuer ist, dann den Arrays je nach aktuellen Monat, 0.0, als Float hinzufügen
//Somit hat jedes Array 12 Elemente in der richtigen Reiehenfolge zum Monatstarif..

if ($JahrFloat == $Startjahr)
    {

        $aktMonat = floatval($Monat);


        switch ($aktMonat) {
            case 1:
                array_unshift($argesammtheuer,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0);
                break;
            case 2:
                array_unshift($argesammtheuer,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0);
                break;
            case 3:
                array_unshift($argesammtheuer,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0);
                break;
            case 4:
                array_unshift($argesammtheuer,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0);
                break;
            case 5:
                array_unshift($argesammtheuer,0.0,0.0,0.0,0.0,0.0,0.0,0.0);
                break;
            case 6:
                array_unshift($argesammtheuer,0.0,0.0,0.0,0.0,0.0,0.0);
                break;
            case 7:
                array_unshift($argesammtheuer,0.0,0.0,0.0,0.0,0.0);
                break;
            case 8:
                array_unshift($argesammtheuer,0.0,0.0,0.0,0.0);
                break;
            case 9:
                array_unshift($argesammtheuer,0.0,0.0,0.0);
                break;
            case 10:
                array_unshift($argesammtheuer,0.0,0.0);
                break;
            case 11:
                array_unshift($argesammtheuer,0.0);
                break;
        }
    }

var_dump($argesammtheuer);

Ist jetzt ungetestet, aber kannst du das nicht prinzipiell nicht mit deutlich weniger Code lösen, indem du einfach so lange vorne ranhängst bis du bei der Länge 12 bist. Also ungefähr so:

<?php

while(count($array) < 12) {
  array_unshit($array, 0.0);
}
1 „Gefällt mir“

Das funktioniert, Danke.

Wäre ich selbst nicht drauf gekommen.
Ich war so fixiert, dass ich eine Funktion (unshift) finde, die das macht was ich brauche.
Da hat man anscheinend Blockaden im Kopf, oder mangelnde Erfahrung…