PHP:
function tellSeconds($NumberOfSeconds)
{
// [...]
// geht $time_map von oben nach unten durch
// $k enthaelt z. B. 'Jahre', $v z. B. '31536000'
// (31536000 sekunden sind ein jahr)
foreach ($time_map as $k => $v) {
// ist der uebergebene timestamp kleiner als die in $v stehende zahl oder 0,
// ueberspringe den schleifendurchlauf
if ($SecondsLeft < $v || $SecondsLeft == 0) {
continue;
} else {
// ansonsten speicher in $amount wie oft die in $v stehende zahl in den timestamp passt
$amount = floor($SecondsLeft/ $v);
// je nach dem, wie oft $v in $SecondsLeft passt, ueberschreibe $SecondsLeft mit den restwert
// (siehe dazu "modulo", ich will keine halbe doku schreiben ;) )
$SecondsLeft = $SecondsLeft % $v;
// ist $amount 1, schneide den letzten buchstaben von $k weg und speichere es in $label
$label = ($amount>1)
? $k
: substr($k, 0, -1); // aus "Jahre" wird "Jahr", aus "Sekunden" wird "Sekunde" etc.
// speicher $label und $amount als string in $stack[]
// z. B. "<strong>2</strong> Jahre"
$stack[] = sprintf('<strong>%s</strong> %s', $amount, $label);
}
}
// die anzahl der in $stack geschriebenen eintraege int $cnt speichern
$cnt = count($stack);
// wenn $cnt mindestens einen eintrag hat und somit nicht leer is
if ($cnt > 1){
// den letzten eintrag von $stack in $tmp1, bzw. $tmp2 speichern
$tmp1 = array_pop($stack);
$tmp2 = array_pop($stack);
// $tmp1 und $tmp zwei als string wieder in $stack anfuegen
array_push ($stack, $tmp2 . ' und '.$tmp1);
};
// alle eintraege in $stack durch komma getrennt als string in $result speichern
// vielleicht sagt dir die funktion 'implode' was, 'join' ist lediglich ein alias fuer diese
// beide machen somit das selbe
$result = join (', ', $stack);
// und $result noch zurueck geben
return $result;
}