Multidimensionales Array sortieren

gidde

Mitglied
Hallo!

Ich habe folgendes Problem:
Ich möchte gerne eine sortierung für einen "datensatz" vornehmen, der aber nicht aus einer sql abfrage stammt, sondern errechnet wurde.

sieht ungefähr so aus:

$array_person[0] = "185"; // Größe
$array_person[1] = "hans"; // Name
$array_person[3] = "m"; // Mann/Frau
$array_person[4] = "stuttgart"; // Wohnort

dieses array geb ich dann in ein weiteres array (array_gesamt)

array_push($array_gesamt, $array_person); // array_person in array_gesamt einwerfen!

dann kommt die nächste person dran (geschieht eigentlich in ner schleife...)
$array_person[0] = "190"; // Größe
$array_person[1] = "fritz"; // Name
$array_person[3] = "m"; // Mann/Frau
$array_person[4] = "esslingen"; // Wohnort

und wieder ins array rein...
array_push($array_gesamt, $array_person);

das geht dann ein paar mal so bis ca 20 personensätze im array gesamt sind...

nun meine frage:

Wie kann ich das array_gesamt nach dem Kriterium GRÖSSE also array_person[0] sortieren lassen?

ich habe schon mit der funktion array_multisort() rumgespielt aber noch nix
dabei rausbekommen!

mfg
 
Hallo....

probiers mit [phpf]usort[/phpf]
Code:
function cmp ($a, $b) {
    return ($a[0] < $b[0]) ? -1 : 1;
}


usort ($array_gesamt, "cmp");
 
hi...wenn du mir mal schreiben würdest was er bei print_r ausgibt dann kann ich dir ne sortierung schreiben ;)
 
bei print_r($array_gesamt)kommt das raus


Array
(
[0] =>
[1] => Array ( [0] => 185 [1] => hans [3] => m [4] => stuttgart )
[2] => Array ( [0] => 190 [1] => fritz [3] => m [4] => esslingen )
)
 
mittlerweile siehts so aus:

Array
(
[0] => Array ( [0] => 185 [1] => hans [3] => m [4] => stuttgart )
[1] => Array ( [0] => 190 [1] => fritz [3] => m [4] => esslingen )
)


wie sortiere ich nun nach grösse
und lasse mir das ausgeben?
 
Vielleicht kannst Du die Berechnung ja auch in SQL vornehmen und dort sortieren.
Ich kenne Deine Formel nicht, daher ein allgemeines Beispiel:
Code:
SELECT
  Feld1,
  Feld2,
  (Feld1 + Feld2) AS Summe
FROM Tabelle
ORDER BY Summe
Ansonsten ist das Beispiel von Sven das Mittel der Wahl.
Allerdings fehlt eine Kleinigkeit ;)
PHP:
function cmp ($a, $b) {
    //Auf Gleichheit prüfen:
    if ($a[0]==$b[0]) {
        return 0;
    }
    //Zur Sicherheit noch mal geklammert,
    //ist aber glaube ich nicht nötig:
    return (($a[0] < $b[0]) ? -1 : 1);
}

usort ($array_gesamt, "cmp");
Du solltest allerdings darauf achten, dass Du keine leeren Arrays in das Gesamt-Array packst.

Gruß hpvw
 
danke !! jetzt scheint es zu funktionieren

habe noch 2 fragen!

1.) wie kann ich eine zweite sortierung einbauen?
das heisst wenn 2 personen beide 190cm gross sind, dass dann noch zusätzlich
nach wohnort sortiert wird


2.) wie gebe ich das $array_gesamt in tabellen form aus?
das es ungefähr so aussieht

grösse name ort
190 fritz esslingen
185 hans stuttgart
 
Zu 1:
PHP:
function cmp ($a, $b) {
    if ($a[0]==$b[0]) {
        //Größe gleich
        if ($a[4]==$b[4]) {
        //Wohnort gleich
            return 0;
        }
        return (($a[4] < $b[4]) ? -1 : 1);
    }
    return (($a[0] < $b[0]) ? -1 : 1);
}

usort ($array_gesamt, "cmp");

Zu 2:
Das würde ich mit [phpf]foreach[/phpf] machen:
PHP:
echo "<table>";
echo "<tr><th>grösse</th><th>name</th><th>ort</th></tr>";
foreach ($array_gesamt as $a) {
    echo "<tr><td>";
    echo $a[0];
    echo "</td><td>";
    echo $a[1];
    echo "</td><td>";
    echo $a[4];
    echo "</td></tr>";
}
echo "</table>";
 
Zurück