Vorher:
Array
(
    [0] => Array
        (
            [Vorname] => Susanne
            [Nachname] => Meier
            [Alter] => 9
        )

    [1] => Array
        (
            [Vorname] => Markus
            [Nachname] => Schmidt
            [Alter] => 35
        )

    [2] => Array
        (
            [Vorname] => Gabi
            [Nachname] => Weber
            [Alter] => 29
        )

    [3] => Array
        (
            [Vorname] => Tobias
            [Nachname] => Bauer
            [Alter] => 71
        )

)
Sortiert aufsteigend nach Nachname:
[3] => Array
(
    [Vorname] => Tobias
    [Nachname] => Bauer
    [Alter] => 71
)
[0] => Array
(
    [Vorname] => Susanne
    [Nachname] => Meier
    [Alter] => 9
)
[1] => Array
(
    [Vorname] => Markus
    [Nachname] => Schmidt
    [Alter] => 35
)
[2] => Array
(
    [Vorname] => Gabi
    [Nachname] => Weber
    [Alter] => 29
)
Sortiert absteigend nach Alter:
[3] => Array
(
    [Vorname] => Tobias
    [Nachname] => Bauer
    [Alter] => 71
)
[1] => Array
(
    [Vorname] => Markus
    [Nachname] => Schmidt
    [Alter] => 35
)
[2] => Array
(
    [Vorname] => Gabi
    [Nachname] => Weber
    [Alter] => 29
)
[0] => Array
(
    [Vorname] => Susanne
    [Nachname] => Meier
    [Alter] => 9
)
Sortiert absteigend nach Alter:
ID# Nachname Vorname Alter
3 Bauer, Tobias 71
1 Schmidt, Markus 35
2 Weber, Gabi 29
0 Meier, Susanne 9
Sortiert aufsteigend nach Vorname:
ID# Nachname Vorname Alter
2 Weber, Gabi 29
1 Schmidt, Markus 35
0 Meier, Susanne 9
3 Bauer, Tobias 71
<?php

// Ein mehrdimensionaler Array zum Testen,
// z.B. das Ergebnis einer Datenbankabfrage
// mit mysql_fetch_array():

$daten = array (
    array(
        
'Vorname'=>'Susanne',
        
'Nachname'=>'Meier',
        
'Alter'=>9
    
),
    array(
        
'Vorname'=>'Markus',
        
'Nachname'=>'Schmidt',
        
'Alter'=>35
    
),
    array(
        
'Vorname'=>'Gabi',
        
'Nachname'=>'Weber',
        
'Alter'=>29
    
),
    array(
        
'Vorname'=>'Tobias',
        
'Nachname'=>'Bauer',
        
'Alter'=>71
    
),
);

// Ausgabe des Testarrays, vor dem Sortieren:
PRINT 'Vorher:<br><pre>';
PRINT_R ($daten);
PRINT 
'</pre>';

// Aufgabe: absteigende Sortierung der Datensätze
// nach dem Nachnamen

// LÖSUNG MIT HILFS-ARRAY:

// Den Namen des gewünschten Sortierfelds in einer Variablen speichern:
$feldname 'Nachname';

// Mittels einer foreach-Schleife
// Aus allen Datensätzen den Wert im Feld 'Nachname'
// in den neuen Array "$Nachname" schreiben,
foreach($daten as $id => $datensatz) {

    
// Namen des Arrays dynamisch aus übergebenem Feldnamen erzeugen,
    // den Originalschlüssel als Index beibehalten,
    // den Wert von Nachname als neues Element dem Array anhängen:
    
    
${$feldname}[$id] = $datensatz[$feldname];
}

// Den neuen Array - unter Beibehhaltung der Schlüsssel(!)- sortieren:
asort(${$feldname});

// SORTIERERGEBNIS - AUSGABE:

// mit einer foreach-Schleife den Hilfs-Array durchlaufen,
// nur die gespeicherten Schlüssel auslesen, und mit ihnen
// die einzelnen Elemente des Original-Arrays
// in der gewünschten Reihenfolge ausgeben:
PRINT "Sortiert aufsteigend nach $feldname:<br><pre>";
foreach (${
$feldname} as $k => $v) {
    ECHO 
"[$k] => ";
    
PRINT_R ($daten[$k]);
}
PRINT 
'</pre>';


// WEITERRFÜHRUNG:
// Die Sortierordnung lässt sich nun leicht abwandeln,
// indem man der Variablen $feldname anfangs einen anderen Wert übergibt,
// z.B. "Alter".
$feldname 'Alter';
// Dann alles wie gehabt:
foreach($daten as $id => $datensatz) {
    ${
$feldname}[$id] = $datensatz[$feldname];
}
asort(${$feldname});

// Will man eine absteigende Sortierung,
// ist diese Anweisung, unmittelbar vor der Ausgabe eingefügt,
// hilfreich:
${$feldname} = array_reverse(${$feldname},true);

PRINT 
"Sortiert absteigend nach $feldname:<br><pre>";
foreach (${
$feldname} as $k => $v) {
    ECHO 
"[$k] => ";
    
PRINT_R ($daten[$k]);
}
PRINT 
'</pre>';

// Natürlich kann man seine Daten auch in einer Tabelle ausgeben:
ECHO "
<table padding='5' border='3'>
<caption>Sortiert absteigend nach 
$feldname:</caption>
<tr>
<th>ID#</th>
<th>Nachname</th>
<th>Vorname</th>
<th>Alter</th>
</tr>
"
;
foreach (${
$feldname} as $i => $v) {
    ECHO 
"<tr>\n";
    ECHO 
"<td>$i</td>\n";
    ECHO 
"<td>".$daten[$i]["Nachname"].", </td>\n";
    ECHO 
"<td>".$daten[$i]["Vorname"]."</td>\n";
    ECHO 
"<td>".$daten[$i]["Alter"]."</td>\n";
    ECHO 
"<tr>\n";
}
ECHO 
'</table>';


// Oder mit Funktion uasort(), die Schlüssel bleiben erhalten:

function compare($a$b) {
    global 
$feldname
    return 
strnatcasecmp($a[$feldname],$b[$feldname]);
}

$feldname 'Vorname';
uasort($daten'compare');
ECHO 
"
<table padding='5' border='3'>
<caption>Sortiert aufsteigend nach 
$feldname:</caption>
<tr>
<th>ID#</th>
<th>Nachname</th>
<th>Vorname</th>
<th>Alter</th>
</tr>
"
;
foreach (
$daten as $i => $v) {

    ECHO 
"<tr>\n";
    ECHO 
"<td>$i</td>\n";
    ECHO 
"<td>".$daten[$i]["Nachname"].", </td>\n";
    ECHO 
"<td>".$daten[$i]["Vorname"]."</td>\n";
    ECHO 
"<td>".$daten[$i]["Alter"]."</td>\n";
    ECHO 
"<tr>\n";
}

ECHO 
'</table>';


highlight_file(__FILE__);
?>