Problem mit String und einem Array

freihsve

Grünschnabel
Hallo Leute

Ich möchte gerne eine normale Textdatei ("test.txt") auf dem Bildschirm darstellen. Die Datei enthält kommagetrennte Werte (3 Werte pro Eintrag --- Datum,Name,Ja/Nein) welche ich gerne nach Datum sortiert ausgeben möchte.

Meine Idee war nun die Datei per
PHP:
explode(",", "test.txt");
zu zerlegen, in einen Array zu schreiben und den Array danach nach Datum zu sortieren und danach auf der Page auszugeben.

Da ich für dies leider keine Datenbank zur Verfügung habe wusste ich ja schon von Anfang an, dass es etwas kompliziert wird, aber ich bin langsam am Ende meines PHP-Lateins.

Weiss jemand Rat? Ich habe jetzt schon etliche Versuche durch aber keiner klappt so recht. :confused:
 
Hallo

also meine Textdatei ist wie folgt aufgebaut:
14.10.2006,Fritz Müller,Ja[ZEILENENDEZEICHEN]
28.10.2006,Hans Meier,Ja[ZEILENENDEZEICHEN]
14.10.2006,Hans Meier,Ja[ZEILENENDEZEICHEN]
28.10.2006,Herbert Huber,Ja[ZEILENENDEZEICHEN]
12.12.2006,Fritz Müller,Ja[ZEILENENDEZEICHEN]

Reicht dir das für den Moment?
In die Datei werden einfach immer neue Einträge hinzugeschrieben. Die Ausgabe soll nach Datum sortiert erfolgen.
 
Hallo Akie

Naja, diese Seiten hab ich mir schon angeschaut, früher schon bei dem Problem um mir Inputs zu holen.
Leider sehe ich da jetzt die Lösung meines Problems nicht ganz...
:confused:

Meine Schwierigkeit ist, dass ich es nicht gebacken kriege die einzelnen Arrayelemente die explode() erzeugt in einen Array zu verpacken, so dass jedes Element in seinem eigenen Arrayfeld steht.

Mir schwebt da sowas wie ein zweidimensionaler Array vor. Jede Arrayzeile enthält jeweils Datum, Name und den Wert Ja oder Nein. Aber ich krieg das nicht hin diesen zu füllen
 
Hi

Die Einträge in deiner Textdatei sind ja schon nach datum sortiert. Kommt jetzt drauf an ob du die Neusten oder die Ältesten zuerst anzeigen willst.

PHP:
$array = file('file.txt');
$array = array_reverse($array); //die neusten zuerst
foreach ($array as $value) {
   $data = explode(',', $value);
   $datum = $data[0];
   $name = $data[1];
   $status = $data[2];
}

Mfg Akkie
 
hallo akkie

du übersiehst leider noch etwas. ich kann den array nicht einfach umgekehrt ausgeben. es kann durchaus auch sein, dass es ein datum gibt das nicht genau in reihenfolge steht. die "datümer" können beliebig in die textdatei geschriben werden.

und genau an diesem detail scheitere ich. sonste hätte ich das problem gelöst.

gruss
freihsve
 
Achso. Ich dachte das Datum währ das Datum des Eintrages.

Dann musst du array_multisort nehmen.

PHP:
$array = file('file.txt');
$date = array();
$name = array();
$state = array();
foreach ($array as $value) {
   $data = explode(',', $value);
   $index[] = array(
      'date' => $data[0],
      'name' => $data[1],
      'state' => $data[2]
   );
   $date[] = $data[0];
   $name[] = $data[1];
   $state[] = $data[2];
}

array_multisort($date, SORT_ASC, $name, SORT_ASC, $state, SORT_ASC, $index);

Ich glaube so oder so ähnlich müßte das hinhauen.

Du musst das Datum als timestamp speichern sonst sortiert er es nicht richtig.

Mfg Akkie
 
Zuletzt bearbeitet:
Hallo an alle

Dank Akkie habe ich das Problem erfolgreich gelöst. Darum poste ich selbstverständlich auch den fertigen PHP-Code für alle die mit dem gleichen bzw. einem ähnlichen Problem zu kämpfen haben.

Wie ich erwähnte habe ich ein Formular, welches in eine normale Textdatei Einträge schreibt. Diese müssen jedoch nicht nach Datum geordnet sein. Daher muss man diese ganzen Formatierungen durchführen.

Hier der Code um die Daten wieder aus der Textdatei auszulesen und sauber darzustellen:
PHP:
function zeige_Daten(){
		// Anzahl Zeilen ermitteln
		$file = file("training.txt");
		$anzahl_zeilen = count($file);

		// Daten in Array einlesen
		$array = file('training.txt');
		$date = array();
		$name = array();
		$state = array();
		foreach ($array as $value) {
			$data = explode(',', $value);
			$date[] = $data[0];
			$name[] = $data[1];
			$state[] = $data[2];
		}
	
		// Array sortieren
		array_multisort($date, SORT_ASC, $name, SORT_ASC, $state);
	
		// Ausgabe
		echo "<table cellspacing=\"0\">";
		for($i = 0; $i < $anzahl_zeilen; $i++){
			if(($i % 2) == 0){
				echo "<tr bgcolor=\"#CCCCCC\"><td>".$date[$i]."</td><td>&nbsp;</td><td>".$name[$i]."</td><td>&nbsp;</td><td>".$state[$i]."</td></tr>";
			}
			else{
				echo "<tr bgcolor=\"#EEEEEE\"><td>".$date[$i]."</td><td>&nbsp;</td><td>".$name[$i]."</td><td>&nbsp;</td><td>".$state[$i]."</td></tr>";
			}
		}
		echo "<table>";
	} // Ende function

So, ich hoffe ich konnte heute nach all meinen Fragen auch noch meinen Teil zum Forum beitragen.
Danke an alle die mir geholfen haben.
 
Sorry, dass ich meine Antwort mehrfach eingetragen habe. Gestern abend während ich den Text schrieb gabs wohl Serverprobleme. Ich erhielt nur Fehlermeldungen beim Einfügen. Dachte eigentlich der Server hätte den Text gar nicht akzeptiert.

Sorry Leute
 
Zurück