Inhalte einer Textdatenbank verschieden sortieren
Dieser Code beschreibt wie man den Inhalt einer Textdatei, dynamisch nach verschiedenen Kriterien sortiert, ausgeben kann.
Komplettes Codebeispiel mit Testdaten
Sortiert werden soll die Ausgabe dieses Beispieldatensatzes, gespeichert in der Datei data.dat
Walter|Helmut|2004.02.02|Deutschland|M|22| Meyer|Lisa|2003.12.28|Deutschland|W|9| Müller|Maximilian|2002.05.22|Schweiz|M|31| Lehmann|Hubert|2002.11.01|Oesterreich|M|37| Schulze|Stefanie|2004.01.04|Deutschland|W|43| Wolter|Willy|2002.06.09|Oesterreich|M|55| Thomas|Eva-Maria|2004.01.17|Schweiz|W|16| Schneyder|Jean|2001.09.04|Frankreich|M|23| Clerc|Pascale|2002.11.17|Frankreich|M|76| Benguerel|Sebastian|2003.08.10|Spanien|M|12| Carl|Johanna|2002.10.01|Deutschland|W|4|
Das komplette Beispielscript, Erläuterungen dazu folgen unterhalb
<?php if (isset($_GET['sort']) && $_GET['sort'] != "") { $sort = preg_replace ("/[^1-6]/", "", $_GET['sort']); } $sort = ($sort == '' || $sort < 1 || $sort > 6 ) ? 1 : $sort; $data = file('data.dat'); foreach ($data as $rows) { $zeile = explode('|', $rows); $nachname[$rows] = $zeile[0]; $vorname[$rows] = $zeile[1]; $datum[$rows] = $zeile[2]; $land[$rows] = $zeile[3]; $geschlecht[$rows] = $zeile[4]; $anzahl[$rows] = $zeile[5]; } if ($sort == 1) { array_multisort($nachname, SORT_STRING, SORT_ASC, $data); $sorttxt = 'Sortiert nach Nachname, aufsteigend'; } elseif ($sort == 2) { array_multisort($vorname, SORT_STRING, SORT_ASC, $data); $sorttxt = 'Sortiert nach Vorname, aufsteigend'; } elseif ($sort == 3) { array_multisort($datum, SORT_NUMERIC, SORT_DESC, $data); $sorttxt = 'Sortiert nach Datum, absteigend'; } elseif ($sort == 4) { array_multisort($land, SORT_STRING, SORT_ASC, $data); $sorttxt = 'Sortiert nach Land, aufsteigend'; } elseif ($sort == 5) { array_multisort($geschlecht, SORT_STRING, SORT_ASC, $data); $sorttxt = 'Sortiert nach Geschlecht, aufteigend'; } elseif ($sort == 6) { array_multisort($anzahl, SORT_NUMERIC, SORT_DESC, $data); $sorttxt = 'Sortiert nach Anzahl, absteigend'; } ?> <table cellspacing="2" cellpadding="2" border="1"> <tr> <td colspan="6"><?php echo $sorttxt; ?></td> </tr> <tr> <td><a href="?sort=1">Name</a></td> <td><a href="?sort=2">Vorname</a></td> <td><a href="?sort=3">Datum</a></td> <td><a href="?sort=4">Land</a></td> <td><a href="?sort=5">Geschlecht</a></td> <td><a href="?sort=6">Anzahl</a></td> </tr> <?php foreach ($data as $sortiert) { $zeilesort = explode('|', $sortiert); echo "<tr> <td>$zeilesort[0]</td> <td>$zeilesort[1]</td> <td>$zeilesort[2]</td> <td>$zeilesort[3]</td> <td>$zeilesort[4]</td> <td>$zeilesort[5]</td> </tr>"; } ?> </table>
Erläuterungen zum Scriptcode
Hier wird zunächst geprüft ob der Wert für $sort existiert, wenn ja wird dieser mit dem Regex bei preg_replace von allen Zeichen die nicht 1-6 sind bereinigt.
if (isset($_GET['sort']) && $_GET['sort'] != "") { $sort = preg_replace ("/[^1-6]/", "", $_GET['sort']); }
Dieser Bereich dient dazu etwaige Falscheingaben abzufangen, ist der Wert für $sort nicht im Bereich 1 – 6 wird dieser auf 1 gesetzt.
$sort = ($sort == '' || $sort < 1 || $sort > 6 ) ? 1 : $sort;
Nun wird die Datei mit file(‚data.dat‘) geöffnet und steht im Array $data zur Verarbeitung bereit.
Die Datei wird Zeilenweise aufgeteilt und die Elemente der Zeilen werden den Arraynamen zugeordnet. Das ist wichtig für die Sortierung.
$data = file('data.dat'); foreach ($data as $rows) { $zeile = explode('|', $rows); $nachname[$rows] = $zeile[0]; $vorname[$rows] = $zeile[1]; $datum[$rows] = $zeile[2]; $land[$rows] = $zeile[3]; $geschlecht[$rows] = $zeile[4]; $anzahl[$rows] = $zeile[5]; }
Hier wird die $sort Variable ausgewertet und damit der entsprechende Sortieralgorythmus aufgerufen. Hierbei gilt:
SORT_ASC – Sortiert in aufsteigender Reihenfolge
SORT_DESC – Sortiert in absteigender Reihenfolge
SORT_REGULAR – Vergleicht die Felder normal
SORT_NUMERIC – Vergleicht die Felder numerisch
SORT_STRING – Vergleicht Felder als Strings
if ($sort == 1) { array_multisort($nachname, SORT_STRING, SORT_ASC, $data); $sorttxt = 'Sortiert nach Nachname, aufsteigend'; } elseif ($sort == 2) { array_multisort($vorname, SORT_STRING, SORT_ASC, $data); $sorttxt = 'Sortiert nach Vorname, aufsteigend'; } elseif ($sort == 3) { array_multisort($datum, SORT_NUMERIC, SORT_DESC, $data); $sorttxt = 'Sortiert nach Datum, absteigend'; } elseif ($sort == 4) { array_multisort($land, SORT_STRING, SORT_ASC, $data); $sorttxt = 'Sortiert nach Land, aufsteigend'; } elseif ($sort == 5) { array_multisort($geschlecht, SORT_STRING, SORT_ASC, $data); $sorttxt = 'Sortiert nach Geschlecht, aufteigend'; } elseif ($sort == 6) { array_multisort($anzahl, SORT_NUMERIC, SORT_DESC, $data); $sorttxt = 'Sortiert nach Anzahl, absteigend'; }
Der letzte Bereich dient dazu die sortierten Daten auszugeben und die Art der Datensortierung auszuwählen. Dies geschieht über die Links mit den Sortierparametern ?sort=x
?> <table cellspacing="2" cellpadding="2" border="1"> <tr> <td colspan="6"><?php echo $sorttxt; ?></td> </tr> <tr> <td><a href="?sort=1">Name</a></td> <td><a href="?sort=2">Vorname</a></td> <td><a href="?sort=3">Datum</a></td> <td><a href="?sort=4">Land</a></td> <td><a href="?sort=5">Geschlecht</a></td> <td><a href="?sort=6">Anzahl</a></td> </tr> <?php foreach ($data as $sortiert) { $zeilesort = explode('|', $sortiert); echo "<tr> <td>$zeilesort[0]</td> <td>$zeilesort[1]</td> <td>$zeilesort[2]</td> <td>$zeilesort[3]</td> <td>$zeilesort[4]</td> <td>$zeilesort[5]</td> </tr>"; } ?> </table>
Beispielausgabe des Scriptes, wenn nach „Anzahl“ sortiert
Keine Kommentare vorhanden