Array-Werte berechnen innerhalb einer foreach-Schleife

loddarmattheus

Erfahrenes Mitglied
Hallo Leute,
ich steh mal wieder auf dem Schlauch und bräuchte bitte Eure Hilfe bzw. zumindest einen Denkansatz.
Ich habe ein Array mit zwei Werten: Einem Timestamp (der genau einem Tag entspricht und chronologisch sortiert ist) und einem Kurswert an genau diesem Tag.
Wenn ich die Schleife durchlaufen lasse, dann soll im Ergebnis der Kursunterschied zwischen dem fünften Tag und dem ersten Tag errechnet werden.

PHP:
<?php

$kurstabelle = array (
    "    1367107200    "    =>    "    103    "    ,
    "    1367193600    "    =>    "    110    "    ,
    "    1367280000    "    =>    "    106    "    ,
    "    1367366400    "    =>    "    89    "    ,
    "    1367452800    "    =>    "    81    "    ,
    "    1367539200    "    =>    "    75    "    ,
    "    1367625600    "    =>    "    86    "    ,
    "    1367712000    "    =>    "    88    "    ,
    "    1367798400    "    =>    "    86    "    ,
    "    1367884800    "    =>    "    84    "    ,
    "    1367971200    "    =>    "    87    "    ,
    "    1368057600    "    =>    "    86    "    ,
    "    1368144000    "    =>    "    90    "    ,
    "    1368230400    "    =>    "    89    "    ,
    "    1368316800    "    =>    "    88    "    ,
    "    1368403200    "    =>    "    91    "    ,
    "    1368489600    "    =>    "    86    "    ,
    "    1368576000    "    =>    "    88    "    ,
    "    1368662400    "    =>    "    92    "    ,
    "    1368748800    "    =>    "    96    "   

);

foreach ($kurstabelle as $timestamp => $wert)
    {
   echo "Der Kurs am " . $timestamp . " ist " . $wert . "<br />\n";
   }

In meinem Beispiel soll also Tag 1 zu Tag 5 errechnet werden (103 zu 81, also - 22); Tag 2 zu Tag 6 (110 zu 75, also -35); Tag 3 zu Tag 7 (106 zu 86, also -20) usw. bis zum Ende des Arrays.

Hat jemand eine Idee für die Umsetzung?
Danke vorab.
Loddar
 
Lösung
So auf die schnelle. geht ev. auch eleganter

Eine Schleife über alle bis kurz vor Schluss
Dann mittels des Indexes mit dem Wert in 4 Tagen zugreifen.
PHP:
//Tag 5 - Tag 1 = 4
$delta = 4;
//Die Datums extrahieren
$dates = array_keys($kurstabelle);
//Die Preise extrahieren. Ist ein gleich grosser Array wie $dates
$rates = array_values($kurstabelle);

//mittels index iterieren. Dabei schauen, dass die letzten $delta Tage nicht mehr dabei sind
for ($i=0; $i < count($kurstabelle) - $delta; $i++){
    //Die Differenz zwischen den Preisen bei $i und $i+$delta berechnen
    $diff = $rates[$i+$delta] - $rates[$i];
    echo "{$dates[$i]} -> {$dates[$i+$delta]}: {$diff}<br />";
}
Ausgabe:
Code:
    1367107200     ->     1367452800    : -22...
Zurück