sort
cr
- php
0 bleicher0 Edgar Ehritt0 Der Martin
0 Tom
hallo zusammen,
ich habe folgendes:
eine txt mit inhalt
arabien|...
zypern|...
deutschland|berlin
und lese diese mittels file() aus, foreach() ... dann explode ich die inhalte am |.
Nun möchte ich gern den Inhalt sortiern nach dem Land ausgeben, d.h. zuerst aravbien, dann deutschland und zum schluss zypern.
ich hatte probiert die datei mit file zu öffnen, dann sort und dann foreach und explode. funktioniert leider nicht weil dann garnichts mehr ausgegben wird.
hat mir jemand einen kleinen tip?
danke!
Grüße,
key=>land, wert=>hs, nach key sortieren?
MFG
bleicher
Hallo Cr,
IMHO ist file() nicht die richtige Funktion für Dich. Nutze in Folge die Funktionen file_get_contents(), str_replase("\n","",$inhalt), explode() und sort()!
Gruß aus Berlin!
eddi
Hallo,
IMHO ist file() nicht die richtige Funktion für Dich.
warum nicht? Sie liefert immerhin ein Array, bei dem jedes Element einen Datensatz aus Land und Hauptstadt darstellt. Das ist als erster Schritt schon sehr günstig.
Nutze in Folge die Funktionen file_get_contents(), str_replase("\n","",$inhalt), ...
... und stelle dann fest, dass das Trennzeichen zwischen den Datensätzen plötzlich weg ist.
Wenn du dann noch explodest (woran? an den '|'? Das gibt ein Durcheinander!), hast du ein Array, das immer aus der Hauptstadt aus Datensatz n und dem Land aus Datensatz n+1 besteht. Der erste und der letzte Datensatz sind dabei unvollständig.
Willst du's nochmal überdenken?
So long,
Martin
Hallo Martin,
Kommando zurück, Du hast recht! Ich bin von einer simplen tsv ausgegangen. ^^
Gruß aus Berlin!
eddi
Hi,
eine txt mit inhalt
arabien|er riad
zypern|nicosia
deutschland|berlinund lese diese mittels file() aus
dann hast du ein Array, von dem jedes Element einer Zeile entspricht.
foreach() ... dann explode ich die inhalte am |.
Ja, gut. Bedenke dabei, dass dadurch alle Elemente deines Arrays ihrerseits wieder zu Arrays mit 2 Elementen werden. Ein einfaches sort() scheitert daran.
Nun möchte ich gern den Inhalt sortiern nach dem Land ausgeben, d.h. zuerst aravbien, dann deutschland und zum schluss zypern.
Die einfache Lösung: Sortiere vor dem explode(), denn da hast du noch Strings, die sich problemlos sortieren lassen.
ich hatte probiert die datei mit file zu öffnen, dann sort und dann foreach und explode. funktioniert leider nicht weil dann garnichts mehr ausgegben wird.
Kommt drauf an - du müsstest immerhin -zigmal die Ausgabe "Array" bekommen.
So long,
Martin
Hi,
hi martin,
dann hast du ein Array, von dem jedes Element einer Zeile entspricht.
genau
Die einfache Lösung: Sortiere vor dem explode(), denn da hast du noch Strings, die sich problemlos sortieren lassen.
ah ich habe im quelltext der ausgeführten php datei folgendes gefunden
Invalid argument supplied for foreach() in ...
wenn ichh sort verwendet kann foreach dann nicht mehr damit umgehen?
hi,
fehler vom amt.
hab das sortierte array wieder überschrieben (ausversehen) und deshalb kam nichts raus...jetzt klappt alles!
danke für eure schnelle hilfe!
Hello,
arabien|...
zypern|...
deutschland|berlinund lese diese mittels file() aus, foreach() ... dann explode ich die inhalte am |.
Nun möchte ich gern den Inhalt sortiern nach dem Land ausgeben, d.h. zuerst aravbien, dann deutschland und zum schluss zypern.
Lies die Datei nicht mit file() sondern mit fgetcsv() aus und erzeuge _gleich_ ein Spaltenarray. Da kannst Du dann jede Spalte einzeln sortieren mit den Standard-Funktionen für Arrays. Ich habe nur noch keine Lösung gefunden, über mehrere Spalten zu sortieren auf diese einfache Weise. Da müsste man dann doch eine Hilfssplate (also einen Ast im Gesamtarray) anlegen.
Alternativ stehen ja auch weiterhin die Benutzerdefinierten-Sortierfunktionen zur Verfügung.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg