# Index und Werte von Array verschieben

**URL:** <https://community.symcon.de/t/index-und-werte-von-array-verschieben/138379>\
**Category:** Skripte, PHP, SQL (Anleitungen)\
**Created:** [12. September 2024 um 11:37 UTC](https://community.symcon.de/t/index-und-werte-von-array-verschieben/138379 "2024-09-12T11:37:07Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![goifalracer](https://community.symcon.de/letter_avatar_proxy/v4/letter/g/c89c15/32.png) [@goifalracer](https://community.symcon.de/u/goifalracer)\
**Post date:** [12. September 2024 um 11:37 UTC](https://community.symcon.de/t/index-und-werte-von-array-verschieben/138379/1 "2024-09-12T11:37:07Z")

</div>

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

```auto
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.

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

```auto
//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.

```auto
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…

---

<div class="post-metadata">

**Author:** ![hfichtinger](https://community.symcon.de/user_avatar/community.symcon.de/hfichtinger/32/79362_2.png) [@hfichtinger](https://community.symcon.de/u/hfichtinger)\
**Post date:** [12. September 2024 um 12:09 UTC](https://community.symcon.de/t/index-und-werte-von-array-verschieben/138379/2 "2024-09-12T12:09:26Z")

</div>

Versuch es mal mit foreach 😉 Das funktioniert bei Arrays sehr gut

> **[PHP: foreach - Manual](https://www.php.net/manual/de/control-structures.foreach.php)**
>
> PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.

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.

> **[PHP: Arrays - Manual](https://www.php.net/manual/de/book.array.php)**
>
> PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.

---

<div class="post-metadata">

**Author:** ![goifalracer](https://community.symcon.de/letter_avatar_proxy/v4/letter/g/c89c15/32.png) [@goifalracer](https://community.symcon.de/u/goifalracer)\
**Post date:** [12. September 2024 um 13:19 UTC](https://community.symcon.de/t/index-und-werte-von-array-verschieben/138379/3 "2024-09-12T13:19:06Z")

</div>

Foreach geht nicht, weil die Reihenfolge nicht stimmt.

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

```auto
//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);

```

---

<div class="post-metadata">

**Author:** ![Dr.Niels](https://community.symcon.de/user_avatar/community.symcon.de/dr.niels/32/77368_2.png) [@Dr.Niels](https://community.symcon.de/u/Dr.Niels)\
**Post date:** [13. September 2024 um 07:50 UTC](https://community.symcon.de/t/index-und-werte-von-array-verschieben/138379/4 "2024-09-13T07:50:42Z")

</div>

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:

```auto
<?php

while(count($array) < 12) {
  array_unshit($array, 0.0);
}
```

---

<div class="post-metadata">

**Author:** ![goifalracer](https://community.symcon.de/letter_avatar_proxy/v4/letter/g/c89c15/32.png) [@goifalracer](https://community.symcon.de/u/goifalracer)\
**Post date:** [13. September 2024 um 13:47 UTC](https://community.symcon.de/t/index-und-werte-von-array-verschieben/138379/5 "2024-09-13T13:47:40Z")

</div>

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…
