Larry-Fiona: PHP: Timestamp welcher ist näher am aktuellen Timestamp?

Hallo,

ich habe verschiedene Timestamps und möchte deren nähe zum aktuellem Timestamp bestimmen, und anzeigen in welcher Phase wir uns gerade befinden.

Aus einer Funktion habe ich ein Multiarray:

$sonnenzeiten = array
  (
  array("Sonnenaufgang",1428465059),
  array("Sonnenfrühstück",1428479459),
  array("Mittagssonne",1428487259),
  array("Nachmittagssonne",1428498059),
  array("Abendsonne",1428498059),
  array("Sonnenuntergang",1428519599)
  );
$jetzt = 1428504659;

Jetzt kommt vermutlich eine Foreach schleife, aber ich weiß nicht wie ich es genau lösen soll. Es kann ja auch noch Mittagssonne sein, wenn ich 5 Minuten nach dem Wert Mittagssonne bin. Muss ich also zu jedem Wert die Differenz errechnen und mir dann die mit dem kleinsten Wert aussuchen? Oder gibt es da eine bessere Lösung?

PS: Wie füge ich PHP Code gut formatiert ein?

Danke Larry-Fiona

  1. Hi,

    PS: Wie füge ich PHP Code gut formatiert ein?

    Leerzeilen vor/nach den ~~~ sind wichtig.

    Hab sie für Dich eingefügt in Dein Posting.

    cu,
    Andreas a/k/a MudGuard

    1. @@MudGuard

      PS: Wie füge ich PHP Code gut formatiert ein?

      Leerzeilen vor/nach den ~~~ sind wichtig.

      Und ein Leerzeichen nach den ~~~ gefolgt von "php".

      Und ja, die Lernschwelle halte ich für zu hoch.

      LLAP

      --
      „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
      1. Hi,

        Und ein Leerzeichen nach den ~~~ gefolgt von "php".

        nach dem ersten oder dem zweiten?

        Es fehlt halt auch ein gut erreichbarer (sprich: neben den Buttons platzierter) Link auf die Kram-Anleitung.

        cu,
        Andreas a/k/a MudGuard

        1. @@MudGuard

          Hi,

          Und ein Leerzeichen nach den ~~~ gefolgt von "php".

          nach dem ersten oder dem zweiten?

          Nach dem ersten:

          ~~~ php
          $antwort = array(
            'Sinn des Lebens' => 42
          );
          ~~~
          

          ergibt:

          $antwort = array(
            'Sinn des Lebens' => 42
          );
          

          Im Gegensatz zu Inline-Code, da steht’s danach:

          `$antwort = array('Sinn des Lebens' => 42);`{: .language-php}
          

          ergibt:

          $antwort = array('Sinn des Lebens' => 42);

          Es fehlt halt auch ein gut erreichbarer (sprich: neben den Buttons platzierter) Link auf die Kram-Anleitung.

          Yep.

          LLAP

          --
          „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
  2. Tach!

    Jetzt kommt vermutlich eine Foreach schleife, aber ich weiß nicht wie ich es genau lösen soll. [...] Muss ich also zu jedem Wert die Differenz errechnen und mir dann die mit dem kleinsten Wert aussuchen? Oder gibt es da eine bessere Lösung?

    Im Prinzip ja. Wenn du nicht die Differenzen zu allen Werten kennst, wie willst du dann wissen, dass es nicht noch einen mit geringerem Abstand gibt?

    Die Lösung kannst du aber auch mit array_reduce() erstellen. Das ist im Gegensatz zu foreach der funktionale Ansatz. Damit lieferst du ein Ergebnis zurück. Bei foreach erstellst du zuerst die Variable für das Ergebnis und legst dort in der Schleife den eventuell niedrigeren Wert ab.

    Du kannst ja mal selbst zu knobeln versuchen, ansonsten hängt in meiner nächsten Antwort mein Lösungsansatz.

    dedlfix.

    1. Tach!

      $sonnenzeiten = array
        (
        array("Sonnenaufgang",1428465059),
        array("Sonnenfrühstück",1428479459),
        array("Mittagssonne",1428487259),
        array("Nachmittagssonne",1428498059),
        array("Abendsonne",1428498059),
        array("Sonnenuntergang",1428519599)
        );
      $jetzt = 1428504659;
      
      $result = array_reduce($sonnenzeiten, function ($prev, $item) use ($jetzt) {
      	if ($prev === null) // erster Durchlauf
      		return $item;
      	
      	$diffPrev = abs($prev[1] - $jetzt);
      	$diffItem = abs($item[1] - $jetzt);
      	
      	return $diffPrev < $diffItem ? $prev : $item;
      }));
      

      Ergebnis ist das Array mit der Abendsonne. Bei gleichen Werten (wie bei Nachmittag und Abend) oder gleichem Abstand gewinnt der später kommende Wert.

      dedlfix.