Ich hab mal eine Frage an PHP/Array-Experten, mein eigenes Grübel-Modul verknotet sich hier gerade:
Ich möchte für ein Highchart einen Wert aus 2 vorhandenen Werte berechnen. Konkret geht es mir darum, aus Temperatur und rel. Feuchte die absolute Feuchte zu berechnen.
Dazu ziehe ich mir die Tagesdaten beider Meßgrößen via AC_GetLoggedValue aus der DB. Rein theoretisch würde ich jetzt in einer for-Schleife das führende Array (Temperatur) durchgehen und via Array-Key den korrespondierenden Wert aus dem Feuchte-Array holen und dann die absolute Feuchte aus beiden Werten errechnen lassen, diese dann in ein Output-Array schieben - fertig.
Nun ist es aber so, dass die Timestamps nicht synchron sind: während ich zur Temperatur fast durchgängig zu jeder Minute einen Wert im Array habe, habe ich bei der Feuchte weitaus größere (Zeit-)Abstände. Damit lassen sich beide Arrays schon nicht mehr über die Keys synchronisieren.
Kann mir jemand einen (möglichst erprobten) Denkansatz geben, in welche Richtung ich hier gehen kann/muss?
1.) geh das feuchte Array durch und geh innerhalb dieser werte mit for each durch die timestamps des Temperatur Arrays. Dabei vergleichst Du, ob der aktuelle Timestamp der Temperaturen kleiner als der der Feuchte ist. Wenn Du an dem Punkte angekommen bist, wo der Temperatur Timestamp größer ist, hast Du die beiden Werte gefunden, die am nächsten an deinem Feuchte Timestamp dran sind.
Dann schaust Du, welcher der beiden Timestamp näher dran ist und den benutzt Du zum rechnen.
Wenn Du es ganz fein haben willst, kannst Du noch ein maxDelta auswerten, dass der Feuchte Timestamp nicht berücksichtigt wird, falls die beiden gefundenen Temperatur-Timestamps zu weit weg sind vom Feuchte Timestamp.
###########
2.) Etwas einfacher wäre, du schneidest von allen Timestamps die Sekunden ab und gehst dann stupide einmal das Feuchte Array durch und schaust, ob du einen aus der gleichen Minute stammenden Temperatur Timestamp hast. Das ist performanter, da nicht in jedem Feuchte-Timestamp alle Temperatur-Timestamps durchlaufen werden, findet aber eben nicht zu jedem Feuchte Timestamp auch einen zugehörigen Temperatur Timestamp …
Irgendwie verständlich erklärt???
[EDIT]
Ich habe mir deinen Post noch mal durchgelesen … Wenn Du alle Temperatur-Timestamp behalten willst, mach es wie in 1. erklärt einfach umgekehrt. Dann wird jedem Temperatur-Timestamp der nächst gelegene Feuchte-Timestamp zugewiesen …
besten Dank für die Überlegungen, genau sowas in der Art wollte ich hören (Methodik). Das hat zwar zu noch mehr Grübelschleifen geführt (genau: warum nicht das Feuchte-Array zum führenden Array machen?! Im anderen Falle müsste ich den fehlenden Feuchtewert interpolieren [oder den Temperaturwert verwerfen] -> zu aufwändig), aber ich werd die Varianten mal ausprobieren und schauen, mit welcher ich am besten zu meinem Ziel komme.