Hi,
ich bräuchte einmal eure Hilfe:
Ich habe folgendes Array:
In jedem unter-Array sind gleich viele Schlüssel vorhanden ([ID],[1],[5]).
Ich will dieses Array nun Variabel sortieren.
Ich brauche also eine Funktion, der ich sage, sie soll die Werte eines beliebigen Schlüssels ([ID],[1] oder [5]) vergleichen und die unter-arrays entsprechend anordnen.
Zum verdeutlichen am Array:
Ich muss der Funktion nun sagen können:
1.) nach welchem Schlüssel vergleichen werden soll ([ID],[1],[5]) Edit: funktioniert schon
2) Ob von A-Z oder Z-A (ASC oder DESC) sortiert werden soll. Edit: funktioniert schon
3) Am besten noch nach mehreren Kriterien sortierbar: zuerst nach [1], wenn dies gleich ist nach [5], wenn dies gleich ist nach [ID]
Leider fehlt mir der ansatz, wie ich das realisieren könnte.
array_multisort fällt leider weg, da dort numerische schlüssel neu indexiert werden ([1] und [5] würde zu [1] und [2] werden). Ich brauche aber zwingend die Schlüssel, da diese später weiter verwendet werden.
Edit:
Punk 1+2 habe ich folgendermaßen bewältigt bekommen:
Nur das sortieren nach mehreren Kriterien bekomme ich noch nicht ganz hin.
Wie könnte ich dies noch realisieren ?
Danke schonmal für eure Hilfe
Mfg.
ich bräuchte einmal eure Hilfe:
Ich habe folgendes Array:
PHP:
$oberarray= array(
"0" => array // unter array 1
(
"ID" => "01",
"1" => "abc",
"5" => "98",
),
"1" => array // unter array 2
(
"ID" => "45",
"1" => "def",
"5" => "76",
),
"2" => array // unter array 3
(
"ID" => "23",
"1" => "ghi",
"5" => "54",
)
);
Ich will dieses Array nun Variabel sortieren.
Ich brauche also eine Funktion, der ich sage, sie soll die Werte eines beliebigen Schlüssels ([ID],[1] oder [5]) vergleichen und die unter-arrays entsprechend anordnen.
Zum verdeutlichen am Array:
PHP:
Wenn ich nach [ID] sortiere, dann muss
$oberarray[1] mit $oberarray[2] vertauscht werden, da
$oberarray[1][ID] > $oberarray[2][ID]
also 45 > 23:
$oberarray= array(
"0" => array // unter array 1
(
"ID" => "01",
"1" => "abc",
"5" => "98",
),
"2" => array // unter array 3 -- wurde mit unter array 2 vertauscht
(
"ID" => "23", //-- 23 ist kleiner
"1" => "ghi",
"5" => "54",
)
"1" => array // unter array 2 -- wurde mit unter array 3 vertauscht
(
"ID" => "45", // -- 45 ist größer
"1" => "def",
"5" => "76",
)
);
Ich muss der Funktion nun sagen können:
1.) nach welchem Schlüssel vergleichen werden soll ([ID],[1],[5]) Edit: funktioniert schon
2) Ob von A-Z oder Z-A (ASC oder DESC) sortiert werden soll. Edit: funktioniert schon
3) Am besten noch nach mehreren Kriterien sortierbar: zuerst nach [1], wenn dies gleich ist nach [5], wenn dies gleich ist nach [ID]
Leider fehlt mir der ansatz, wie ich das realisieren könnte.
array_multisort fällt leider weg, da dort numerische schlüssel neu indexiert werden ([1] und [5] würde zu [1] und [2] werden). Ich brauche aber zwingend die Schlüssel, da diese später weiter verwendet werden.
Edit:
Punk 1+2 habe ich folgendermaßen bewältigt bekommen:
PHP:
// Vergleichsfunktion
function cmp($a, $b) {
global $sortiere;
global $nachspalte;
if ($a[$nachspalte] == $b[$nachspalte]) {
return 0;
}
if($sortiere == '0') { // 0 = A-Z;
return strcasecmp($a[$nachspalte], $b[$nachspalte]);
} elseif ($sortiere == '1') { // 1 = Z-A
return (-1)*strcasecmp($a[$nachspalte], $b[$nachspalte]);
} else { // sollte eigentlich nicht gebraucht werden, da Funktion erst nach _POST['krit'] aufgerufen wird :)
return 0;
}
}
$sortiere = $_POST['sortiere']; // 0 = A-Z; 1 = Z-A
$nachspalte = $_POST['krit']; // ID, 1, 5
uasort($oberarray, "cmp");
Nur das sortieren nach mehreren Kriterien bekomme ich noch nicht ganz hin.
Wie könnte ich dies noch realisieren ?
Danke schonmal für eure Hilfe

Mfg.
Zuletzt bearbeitet: