Multidimensionales Array sortieren!

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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...
    Last edited by Schanz; 10-08-2008, 14: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;
            }
        } 

    Comment

    Working...
    X