Skip to main content

Alles für die Homepage... Scripte, Templates, Workshops und Support

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

CODE:
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

CODE:
<?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.

CODE:
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.

CODE:
$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.

CODE:
$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

CODE:
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

CODE:
?>
<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
xx

 


Ähnliche Beiträge



Keine Kommentare vorhanden


Du hast eine Frage oder eine Meinung zum Artikel? Teile sie mit uns!

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *