Aus Textdatei auslesen und sortieren

scadoXus

Grünschnabel
Hallo :)

Leider hakts bei mir im Moment total :(
Und zwar hab ich eine Textdatei die folgendermaßen aufgebaut ist:

Cypher 3 27 0 0 20
snodo 66 11 0 0 12
Mandrick 2 9 1 0 5
... usw.

Das Auslesen an sich bereitet auch keine Probleme, aber das Sortieren nach den Nicknames. Ich hab keine Ahnung, welches die richtige Methode ist. Mit ksort hab ich es wenigstens geschafft, die ersten beiden "Spalten" zu sortieren. Die Ausführungen auf http://de.php.net/ haben mich eher noch mehr verwirrt :/

PHP:
<?php      
$data = file("list.txt");   
foreach($data as $line)   {       
list($nick,$gewonnen,$verloren,$abgebrochen,$unentschieden,$revanche) = explode(" ",$line); 
  $bla[$nick] = trim($gewonnen);
}
ksort($bla);
foreach ($bla as $nick => $gewonnen){  	
echo "<tr>";      
echo "<td>$nick</td>";      
echo "<td>".$gewonnen."</td>";
echo "</tr>";
}

 ?>

Wie funktiert das mit der ganzen "Tabelle"? Für einen Denkanstoß wäre ich sehr dankbar.

mfg,
scadoXus
 
Code gibt's von mir wie so oft nicht. Mit der Funktion [phpf]usort[/phpf] ist Dein Vorhaben auf elegante Art möglich. Für die Sortier-Regeln wird dabei an usort() eine eigene Funktion übergeben. Einfach mal durchlesen, probieren und auf Deinen Fall umschreiben.

snuu
 
Hallo :)

Dankeschön, hat soweit nun super geklappt.
Das einzige Problem ist nun, dass es bei der Groß- und Kleinschreibung hakt. Gibts einen einfachen Weg, dieses Problem zu lösen? Die Ausgabe soll wieder den Einträgen der Liste entsprechen, also wieder die dort angegebene Schreibweise beinhalten.

Wäre dankbar, wenn mir da nochmal jemand einen Denkanstoß geben könnte.


scadoXus
 
Sorry, ich verstehe dein Problem jetzt nicht? Was stimmt denn nicht?
Vielleicht könntest du auch mal den Code, den du aktuell verwendest, posten.
 
Hallo,

also hier ist der Code.. und nicht die Hände über den Kopf zusammenschlagen, weil er vermutlich voller Anfängerfehler ist.

PHP:
<?php


function sortbynick($a, $b) 
{ 
  list($nick,$gewonnen,$verloren,$abgebrochen,$unentschieden,$revanche) = explode(" ", $a[0]); 
  $name1 = $nick; 

  list($nick,$gewonnen,$verloren,$abgebrochen,$unentschieden,$revanche) = explode(" ", $b[0]); 
  $name2 = $nick; 

 
  if ($name1==$name2) return 0; 
  else return ($name1>$name2)? 1: -1; 
} 


$stats = "list1.txt"; 
$inhalt = file($stats); 


// jede zeile durchlaufen 
foreach ($inhalt as $zeile) { 
  $eintrag[] = explode(" ", $zeile); 
} 

// sortieren 
usort($eintrag, "sortbynick"); 

// ausgabe 
foreach ($eintrag as $e) { 
 

    echo "<tr>";
    echo "<td>".$e[0]."</td>";
    echo "<td>".$e[1]."</td>";
    echo "<td>".$e[2]."</td>";
    echo "<td>".$e[3]."</td>";
    echo "<td>".$e[4]."</td>";
    echo "<td>".$e[5]."</td>";
	echo "</tr>";
  
}

 ?>

Das Ergebnis wäre dann dieses hier:
http://www.scadoxus.de/test/bla.php
Zwar alphabetisch sortiert.. aber leider auch nach Groß- und Kleinschreibung. So war es nicht unbedingt gedacht ;)


scadoXus
 
//EDIT:

Ok, hab die Lösung (hab wieder viel zu kompliziert gedacht):

Ändere deine Funktion folgendermaßen, dann klappts:
PHP:
function sortbynick($a, $b)
{
    list($nick,$gewonnen,$verloren,$abgebrochen,$unentschieden,$revanche) = explode(" ", $a[0]); 
    $name1 = $nick;

    list($nick,$gewonnen,$verloren,$abgebrochen,$unentschieden,$revanche) = explode(" ", $b[0]);
    $name2 = $nick;
    if (strtolower($name1) == strtolower($name2)) {
        return 0; 
    } else {
        return (strtolower($name1) > strtolower($name2)) ? 1 :  -1;
    }
}
 
Zuletzt bearbeitet:
Zurück