[PHP] Tabelle sortieren

  • Ersteller Ersteller Mr. Snoot
  • Erstellt am Erstellt am
M

Mr. Snoot

Gast
Hio,

ich will eine Textdatei auslesen, in eine 2-spaltige Tabelle schreiben und selbige dann nach der zweiten Spalte absteigend sortieren lassen.

Die Datei auszulesen und in die Tabelle zu schreiben hab ich schonmal geschafft, das Sortieren aber nicht - finde nur Beispiele dass direkt ohne Tabelle z.B. alphabetisch zu sortieren.

Die Textdatei hat folgendes Format:

text|zahl
text|zahl
text|zahl
.
.
.

Der Text wird in der ersten Spalte ausgegeben, die Zahl in der zweiten; und nach den Zahlen soll das ganze absteigend sortiert werden.

So sieht das bisher aus
PHP:
<html>
<head>
 <title>Suchanfragen</title>
</head>

<body>

<table width="300" border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td width="180">Suchbegriff</td>
    <td width="120">Anzahl</td>
  </tr>

<?php
$datei = fopen("search_log.txt", "r");
while (!feof($datei))
	{
	$zeile = fgets($datei, 512);
	$inhalt = explode("|", trim($zeile));
?>

 <tr>
  <td><?php echo basename($inhalt[0]); ?></td>
  <td><?php echo $inhalt[1]; ?></td>
 </tr>

<?php
	}
	fclose($datei);
?>

</table>
</body>
</html>
Es muss nicht möglich sein, das Ganze per Link noch anders zu sortieren; einfach absteigend nach der zweiten Spalte und gut ist :)

Kann mir da wer weiterhelfen?
 
Zuletzt bearbeitet:
Du hast das ganze ja eh im nem Array drin. Darin müsstest du dann auch sortieren. Vielleicht helfen dir diese PHP-Array-Funktionen ja weiter:

arsort
void arsort (array array [, int sort_flags])
(PHP 3, PHP 4 >= 4.0b1)
Sortiert ein Array absteigend nach den Werten

asort
void asort (array array [, int sort_flags])
(PHP 3, PHP 4 >= 4.0b1)
Sortiert ein Array aufsteigend nach den Werten

krsort
int krsort (array array [, int sort_flags])
(PHP 3>= 3.0.13, PHP 4 >= 4.0b4)
Sortiert ein Array absteigend nach dem Index

ksort
int ksort (array array [, int sort_flags])
(PHP 3, PHP 4 >= 4.0b1)
Sortiert ein Array aufsteigend nach dem Index

natcasesort
void natcasesort (array array)
(PHP 4 >= 4.0RC2)
Sortiert ein Array in "natürlicher Reihenfolge

natsort
void natsort (array array)
(PHP 4 >= 4.0RC2)
Sortiert ein Array in "natürlicher Reihenfolge

rsort
void rsort (array array [, int sort_flags])
(PHP 3, PHP 4 >= 4.0b1)
Sortiert ein Array absteigend nach den Werten

sort
void sort (array array [, int sort_flags])
(PHP 3, PHP 4 >= 4.0b1)
Sortiert ein Array aufsteigend nach den Werten

Ansonsten halt beim Auslesen oder für den Array selber eines der typischen sortierverfahren implementieren :D
 
Aber wo müsste die Funktion denn dann hin?

Wenn ich z.B. ne Datei öffne und diese alphabetisch sortiere, kann man das ja direkt nach dem Öffnen machen.

In meinem Fall kann ich aber erst sortieren, nachdem die Zeile text|zahl getrennt wurde; also nach der Zeile
PHP:
$inhalt = explode("|", trim($zeile));
Seh ich das richtig? Was muss ich dann als Array bei arsort (array); angeben?
 
Hi Gauder,

hab mich mal Deines Problems angenommen und ich muss sagen, es war ein wenig kniffliger als zunächst angenommen.

Nichtsdestotrotz hier der entsprechende Quelltext:
PHP:
<html>
<head>
<title>Suchanfragen</title>
</head>

<body>

<table width="300" border="1" cellpadding="2" cellspacing="0">
  <tr>
    <td width="180">Suchbegriff</td>
    <td width="120">Anzahl</td>
  </tr> 
<?php
$datei = fopen("search_log.txt", "r");
$inhalt = array();
while (!feof($datei))
    {	    
	    $zeile = fgets($datei, 512);
	    $inhalt[] = explode("|", trim($zeile));
    }
    fclose($datei);

$s_datei = array();
$s_treffer = array();

/* Hier wird das Sortieren vorbereitet. */
foreach ($inhalt as $key => $s_ergebnis) {
   $s_datei[$key]  	= $s_ergebnis[0];
   $s_treffer[$key] = $s_ergebnis[1];
}
/* Das Array wird sortiert. */
array_multisort($s_treffer, SORT_DESC, $s_datei, SORT_ASC, $inhalt);


foreach ($inhalt as $key => $s_ergebnis) {
?>
 <tr>
  <td><?php echo basename($s_ergebnis[0]); ?></td>
  <td><?php echo $s_ergebnis[1]; ?></td>
</tr>
<?php } ?>
</table>
</body>
</html>

So viel Spass noch beim Umbau Deiner Seite. ;)

Ciao
 
Ja, äh, was soll ich sagen :daumen:

Vielen Dank :) (wenn das so weitergeht, schreiben mehr andere Leute an meiner Seite, als ich selbst :D)
 
Zurück
Oben