PHP / Tipps / HTML-Tabelle sortieren

von: Werner Zenk

Hier stelle ich Ihnen eine Möglichkeit vor, wie man eine HTML-Tabelle mit PHP über einem Link sortieren kann.

Demo:



Quelltext:HTML-Tabelle sortieren
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<!DOCTYPE html>
<html>
 <head>
  <title>HTML-Tabelle sortieren</title>

<style type="text/css">
 th a {text-decoration: None; color: #FF0000;}
</style>


 </head>
<body>

<table border="1">
 <tr style="background: #E5E5E5;">
  <th>
   Name
   <a href="?spalte=1&amp;sort=asc">&uarr;</a>
   <a href="?spalte=1&amp;sort=desc">&darr;</a>
  </th>
  <th>
   Land
   <a href="?spalte=2&amp;sort=asc">&uarr;</a>
   <a href="?spalte=2&amp;sort=desc">&darr;</a>
  </th>
  <th>
   Alter
   <a href="?spalte=3&amp;sort=asc">&uarr;</a>
   <a href="?spalte=3&amp;sort=desc">&darr;</a>
  </th>
 </tr>

<?php
/* HTML-Tabelle sortieren -
 Homepage-Total.de - 24.11.2011 */

$daten file("daten.txt"); // Daten einlesen

// Auswahl der Spalte
$spaltennummer = isset($_GET["spalte"]) ? $_GET["spalte"] : 1;

// Daten in ein zweites Array kopieren
$schluessel = array();
foreach (
$daten as $zaehler => $element) {
 list(
$spalte[1], $spalte[2], $spalte[3]) = explode(";"$element);
 
$schluessel[$zaehler] = array($spalte[$spaltennummer], $zaehler);
}

// Schlüssel sortieren
isset($_GET["sort"]) ? (($_GET["sort"] == "desc") ?
 
rsort($schluessel) : sort($schluessel)) : sort($schluessel);

 
// Die Daten mit dem sortierten Schlüssel ausgeben
 
foreach ($schluessel as $element) {
  list(
$name$land$alter) = explode(";"$daten[$element[1]]);
  echo 
"<tr><td>$name "</td><td>$land "</td><td>.
   
$alter "</td></tr>";
}
?>

</table>

</body>
</html>


Die Daten zum sortieren kommen aus der externen Datei „daten.txt”,
diese haben folgendes Format:

Quelltext:daten.txt
1
2
3
4
5
6
7
8
Peter;Deutschland;17
Adamo;Italien;15
Ramona;Belgien;19
Luis;Frankreich;14
Miranda;Spanien;15
Zacharias;Israel;13
Emil;Schweden;12
    Und Ihre Meinung?
      Sie vermissen auf dieser Seite wichtige Informationen oder haben Hinweise für uns?
Kommentare: 5 » aufmachen   
Mike:
Danke! Genau so etwas habe ich gesucht . Weitere Spalten braucht man also nur bei
list($spalte[1], $spalte[2], $spalte[3], $spalte[4]) = explode(";", $daten[$zaehler]);
und
 list($name, $land, $alter, $spalte4) = explode(";", $daten[$element[1]]); 
einzutragen?

Werner:
Ja. Außerdem müssen noch die Links zum sortieren angepasst werden:
<a href="?spalte=4&amp;sort=asc">&darr;</a>
<a href="?spalte=4&amp;sort=desc">&uarr;</a>


Christian:
Hi,die Vorlage ist ganz gut. Ich habs auch gleich ausprobiert. Allerdings hatte es dann bei 6 Spalten mit Datum und Integer Probleme: das Datum muss im Format YYYYMMDD vorliegen und erst umgewandelt werden:
  list($Spalte1, $Spalte2, $Spalte3, $Spalte4, $Spalte5, $Spalte6) = explode(";", $daten[$element[1]]);
	$temp = strtotime($Spalte1);
	$Datum = date('d.m.Y', $temp); 
und soweit ich mich schlau machen konnte muss die integer-Spalte auch umgewandelt werden:
 $Spalte5 += 0; 
Allerdings habe ich das Problem, dass nicht zwischen 10 und 100 unterschieden wird. Also vermute ich, dass "int" nicht richtig erkannt oder umgewandelt wird.Kann mir da noch jemand helfen? (Und kanns sein, dass Strings auch komisch sortiert werden?)

Werner:
Auf: http://www.php.net/de/sort steht das man bei sort einen zusätzlichen Parameter (sort_flags) hinzufügen kann.

Jaeys:
hmmm, da fehlen ein paar Infos/Dateien ...
Hilfe finden Sie im » netzgemein.de - Forum. Auch als „Gast” können Sie dort Fragen stellen!  
 Das könnte Sie interessieren:
Dateiattribute  Dateigröße umrechnen  Uhr mit Datum - Zeitanzeige  Auswahlliste für Tage- und Wochenauswahl - Diese Auswahlliste fügt jeden siebten Tag die Anzahl der Wochen hinzu.  PHP Bausteine 9  Seitentitel der aktuellen Seite auslesen  Dateigröße ermitteln und Maßeinheit anzeigen  AJAX-Anleitung (AJAX-Suchfunktion)  CSS-Boxen mit PHP erstellen  …mehr
© 2000-2012 Homepage-Total.de Kontakt - Impressum - Banner