Hi,
so langsam nähern wir uns dem an, was bei rauskommen soll. Hier ein relativ leicht zu verstehender Quelltext mit vielen Erklärungen. Du sollst ja schließlich etwas dabei lernen:
Es sind nicht mal 11 Zeilen
so langsam nähern wir uns dem an, was bei rauskommen soll. Hier ein relativ leicht zu verstehender Quelltext mit vielen Erklärungen. Du sollst ja schließlich etwas dabei lernen:
PHP Code:
<?php
/**
* Gibt die Anzahl der Minuten einer Uhrzeit seit Mitternacht zurück.
* @param string $time Die Uhrzeit in dem Format 'hh:mm'
* @return int Die Anzahl der Minunten seit Mitternacht
*/
function getTime($time) {
$time = explode(':',$time);
return (int)$time[1] + 60 * (int)$time[0];
}
// Muss nach der Uhrzeit sortiert sein
$DB = array(
array('id'=>10452, 'status'=>1, 'datum'=>'17.07.2009', 'uhrzeit'=>'08:02', 'km'=>735, 'Adresse'=>'adresse1'),
array('id'=>10452, 'status'=>1, 'datum'=>'17.07.2009', 'uhrzeit'=>'08:12', 'km'=>741, 'Adresse'=>'adresse2'),
array('id'=>10452, 'status'=>1, 'datum'=>'17.07.2009', 'uhrzeit'=>'08:24', 'km'=>749, 'Adresse'=>'adresse3'),
array('id'=>10452, 'status'=>0, 'datum'=>'17.07.2009', 'uhrzeit'=>'08:27', 'km'=>749, 'Adresse'=>'adresse4'),
array('id'=>10452, 'status'=>0, 'datum'=>'17.07.2009', 'uhrzeit'=>'08:31', 'km'=>791, 'Adresse'=>'adresse5'),
array('id'=>10452, 'status'=>1, 'datum'=>'17.07.2009', 'uhrzeit'=>'08:38', 'km'=>798, 'Adresse'=>'adresse6'),
array('id'=>10452, 'status'=>1, 'datum'=>'17.07.2009', 'uhrzeit'=>'08:46', 'km'=>842, 'Adresse'=>'adresse7'));
/////////////////////////////////////////////////////////////////////
// Die Startzeiten ermitteln und überflüssige Einträge ignorieren. //
/////////////////////////////////////////////////////////////////////
$Rows = Array();
// Auf einen Status setzen, den es nicht gibt, damit der erste Eintrag auf jeden Fall beachtet wird.
$CurrenStatus = -1;
for($i=0; $i<count($DB); $i++) {
// Prüfen, ob sich der Status geändert hat. Ansonsten brauchen wir den Eintrag nicht zu beachten.
if($CurrenStatus != $DB[$i]['status']) {
// Die Änderung des Status's speichern
$CurrenStatus = $DB[$i]['status'];
// Den Eintrag zur Liste hinzufügen
$Rows[]['start'] = $DB[$i];
}
};
//////////////////////////////////////////
// So jetzte fehlen noch die Endzeiten. //
//////////////////////////////////////////
$RowLength = count($Rows);
// Es wird jede Reihe durchrgegangen
for($i=1; $i<$RowLength; $i++) {
// Die Startseite der Reihe $i ist gleich die Endzeit der Reihe davor ($i-1)
$Rows[$i-1]['end'] = $Rows[$i]['start'];
};
// Für die letzte Reihe setzte ich die Start- und die Endzeit gleich
$Rows[$RowLength-1]['end'] = $Rows[$RowLength-1]['start'];
/////////////////
// Die Ausgabe //
/////////////////
?>
<table>
<tr>
<th>
<th>Startzeit
<th>Adresse-abfahrt
<th>Ankunftzeit
<th>Adresse-ankunft
<th>Fahrzeit
<th>km
<?php foreach($Rows as $Entry): ?>
<tr>
<td><?=( 1 == $Entry['start']['status'] ? 'Fahrzeit' : 'Standzeit')?>
<td><?=$Entry['start']['uhrzeit']?>
<td><?=$Entry['start']['Adresse']?>
<td><?=$Entry['end']['uhrzeit']?>
<td><?=$Entry['end']['Adresse']?>
<td><?=getTime($Entry['end']['uhrzeit'])-getTime($Entry['start']['uhrzeit'])?>
<td><?=$Entry['end']['km']-$Entry['start']['km']?>
<?php endforeach; ?>
</table>
Comment