remuen: Zeidimensionales Array nach zwei Spalten sortieren

Hallo

Ich möchte gerne ein zweidimensionales Array nach mehreren Spalten sortieren. Ich lese ein Textfile mit beliebig vielen "Records" (Zeilen) mit folgendem Aufbau unter Benutzung von explode(";",$test)in ein Array ein, so dass sich ein zweidimensionales Array ergibt:

Name;Vorname;Runden;Totalpunkte;Bestwert;Datum

Das Sortieren nach nur einer beliebigen Spalte (z.B. nach Totalpunkte) ist soweit problemlos:

function compare($x, $y)
    {
    if ($x[3] == $y[3]) return 0;
    else
      if ($x[3] < $y[3]) return -1;
      else return 1;
    };
  usort ($array, 'compare');

Wie aber kann ich am besten/einfachsten die Sortierung nach zwei Spalten vornehmen, also z.B. zuerst nach Totalpunkte und bei Gleichheit von zwei Werten zusätzlich nach Datum oder Name (vergleichbar mit "ORDER BY Totalpunkte, Datum" resp. "ORDER BY Totalpunkte, Datum" )

Wer hat mir einen Tipp oder gar die Lösung dazu?

Vielen Dank im voraus

René

  1. Hallo

    Name;Vorname;Runden;Totalpunkte;Bestwert;Datum
    Das Sortieren nach nur einer beliebigen Spalte (z.B. nach Totalpunkte) ist soweit problemlos:

    Wie aber kann ich am besten/einfachsten die Sortierung nach zwei Spalten vornehmen, also z.B. zuerst nach Totalpunkte und bei Gleichheit von zwei Werten zusätzlich nach Datum oder Name

    Wo ist das Problem?

    function compare($x, $y)
        {
        if ($x[3] == $y[3]) return 0;

    ^Hier weißt Du, dass die Werte für Totalpunkte gleich sind. Nun gibst Du nicht 0 zurück, sondern vergleichst weiter.

    else
          if ($x[3] < $y[3]) return -1;
          else return 1;
        };
      usort ($array, 'compare');

    viele Grüße

    Axel

    1. Hallo Axel

      Wo ist das Problem?

      Mit an Sicherheit grenzender Wahrscheinlichkeit bei mir ... *grins*

      Offensichtlich weiss ich von SQL-Datenbanken mehr als von Arrays und habe mich vorher wohl zu lange mit array_multisort abgemüht und dabei völlig übersehen, dass des Rätsels Lösung so nahe liegt.

      Vielen Dank!

      René