Multidimensionales Array sortieren!

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Multidimensionales Array sortieren!

    Hallo,

    Irgentwie bekomm ich es nicht gebacken ein Multidimensionales Array zu sortieren, ich zeige euch mal direkt die Ausgabe von print_r():

    PHP-Code:
    Array
    (
        [
    0] => Array
            (
                [
    id] => 1
                
    [codec] => 12
                
    [parent] => -1
                
    [order] => 1
                
    [maxusers] => 20
                
    [name] => "World of Warcraft"
                
    [flags] => 24
                
    [password] => 0
                
    [topic] => "Test2"
            
    )

        [
    1] => Array
            (
                [
    id] => 2
                
    [codec] => 12
                
    [parent] => -1
                
    [order] => 2
                
    [maxusers] => 20
                
    [name] => "Counter-Strike"
                
    [flags] => 8
                
    [password] => 0
                
    [topic] => ""
            
    )

        [
    2] => Array
            (
                [
    id] => 3
                
    [codec] => 12
                
    [parent] => 2
                
    [order] => 2
                
    [maxusers] => 20
                
    [name] => "#1on1"
                
    [flags] => 0
                
    [password] => 0
                
    [topic] => ""
            
    )

        [
    3] => Array
            (
                [
    id] => 4
                
    [codec] => 12
                
    [parent] => 2
                
    [order] => 1
                
    [maxusers] => 20
                
    [name] => "#2on2"
                
    [flags] => 0
                
    [password] => 0
                
    [topic] => ""
            
    )

        [
    4] => Array
            (
                [
    id] => 5
                
    [codec] => 12
                
    [parent] => 2
                
    [order] => 3
                
    [maxusers] => 20
                
    [name] => "#3on3"
                
    [flags] => 0
                
    [password] => 0
                
    [topic] => ""
            
    )

        [
    5] => Array
            (
                [
    id] => 6
                
    [codec] => 12
                
    [parent] => 2
                
    [order] => 4
                
    [maxusers] => 20
                
    [name] => "#4on4"
                
    [flags] => 0
                
    [password] => 0
                
    [topic] => ""
            
    )

        [
    6] => Array
            (
                [
    id] => 7
                
    [codec] => 12
                
    [parent] => 2
                
    [order] => 5
                
    [maxusers] => 20
                
    [name] => "#5on5"
                
    [flags] => 0
                
    [password] => 0
                
    [topic] => ""
            
    )


    Soo... vieleicht erkennt der ein oder andere das es sich hierbei um die Channel eines Teamspeak servers handelt.
    Der Telnet server gibt die Daten so aus wie sie im Array vorzufinden sind, ABER ich habe einmal das Feld "order" bei den Channels #1on1 und #2on2 vertauscht!
    Im Teamspeak server stehen die channel also in dieser Reihenfolge:
    • World of Warcraft
    • Counter-Strike
    • --#2on2
    • --#1on1
    • --#3on3
    • --#4on4
    • --#5on5


    So, im Array werden sie aber noch in der alten Reihenfolge ausgegeben (#1on1, #2on2 usw...)

    Ich will jetzt das Array sortieren, und zwar in der 2. Ebene nach den Werten parent (Aufsteigend) und danach nach der ORDER (Aufsteigend) sortieren.
    // Edit: Achso, und als 3. Wert noch nach der ID (Aufsteigend) wenns geht, falls parrent und sortorder gleich sind!

    Wäre dankbar für Hilfe...
    Zuletzt geändert von Schanz; 10.08.2008, 15:16.

  • #2
    Ok habs jetzt hinbekommen... Für eine einfachere bzw. Resourcensparendere Lösung bin ich trozdem immer noch dankbar.

    PHP-Code:
    usort($array'sortArray');

    function 
    sortArray($a$b)
        {
            if(
    $a["parent"] == $b["parent"])
            {
                if(
    $a["order"] == $b["order"])
                {
                    return 
    $a["id"] > $b["id"] ? : -1;
                } else {
                    return 
    $a["order"] > $b["order"] ? : -1;
                }
            } else {
                return 
    $a["parent"] > $b["parent"] ? : -1;
            }
        } 

    Kommentar

    Lädt...
    X