cr: sort

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!

  1. Grüße,
    key=>land, wert=>hs, nach key sortieren?
    MFG
    bleicher

    --
    __________________________-

    FirefoxMyth
  2. 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

    --
    Wenn der Weg zur Hölle mit guten Vorsätzen gepflastert ist, wäre der zum Himmel aus bösen Absichten betoniert. Was aber ist dann ein Weg voller Irrtümer?
    Wer weiß - vielleicht der Mittelweg. ;)
    1. 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.

      explode()

      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

      --
      Wenn alle das täten, wass sie mich können,
      käme ich gar nicht mehr zum Sitzen.
      1. Hallo Martin,

        Kommando zurück, Du hast recht! Ich bin von einer simplen tsv ausgegangen. ^^

        Gruß aus Berlin!
        eddi

        --
        Wenn der Weg zur Hölle mit guten Vorsätzen gepflastert ist, wäre der zum Himmel aus bösen Absichten betoniert. Was aber ist dann ein Weg voller Irrtümer?
        Wer weiß - vielleicht der Mittelweg. ;)
  3. Hi,

    eine txt mit inhalt

    arabien|er riad
    zypern|nicosia
    deutschland|berlin

    und 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

    --
    Das einzige Problem beim Nichtstun: Man weiß nie, wann man damit fertig ist.
    1. 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?

      1. 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!

  4. Hello,

    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.

    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.

    siehe http://selfhtml.bitworks.de/snippets/dateien_auslesen/arbeiten_mit_csv-dateien/get_csv_data_20090627_1637.php}

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de