Array sortieren

Array sortieren

am 02.09.2006 18:08:41 von Marcel Polty

Hallo,

ich möchte einen Array sortieren und habe das so probiert:

Function sortiere_array($a, $sn)
// arr = array welcher sortiert werden soll
// sn = Feld nach dem sortiert werden soll
{
function cmp_array ($a, $b)
{
global $sn; // $sn = nach was sortieren werden soll
if ($a[$sn]==$b[$sn]) return 0;
return ($a[$sn] < $b[$sn]) ? -1 : 1;
}
usort($a, "cmp_array");
}

Das sortiert aber nicht richtig, es kommen undefierbare Ergebnisse
dabei heraus.
Der Array sieht etwa so aus:
liste[0]["id"]="1500"
liste[0]["lang"]="1500"
liste[0]["breit"]="1500"
liste[0]["hoch"]="1500"
liste[0][... insgesamt 17 Felder]

Aufgerufen wird die Funktion oben so:
sortiere_array($liste, "breit");

Hat jemand einen Tipp für mich warum der nicht korrekt sortiert?

Vielen Dank und ein schönes Wochenende

Gruß Marcel

Re: Array sortieren

am 03.09.2006 11:12:10 von Clemens Hammacher

Hallo!

2 Sachen:
1. ist $sn nicht global
2. arbeitet sortiere_array mit einer Kopie des übergebenen Arrays

Das einfachste, um das zu korrigieren ist
1. ein globales $sn definieren
2. das Array per Referenz übergeben
(s. http://de.php.net/manual/de/functions.arguments.php)

Da kommt dann das hier bei raus:

> function sortiere_array(&$a, $sn)
> {
> $GLOBALS["sn"] = $sn;
> function cmp_array ($a, $b)
> {
> global $sn;
> if ($a[$sn] == $b[$sn]) return 0;
> return ($a[$sn] < $b[$sn]) ? -1 : 1;
> }
> usort($a, "cmp_array");
> }
>

HTH, viele Grüße

Clemens