[PHP] Sorteer probleem met array (usort)

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Ik wil uit 2 tabellen een array vormen met daarin een titel en een timestamp.

Nadat deze is gevormd wil ik de array sorteren op timestamp, wat mij het makkelijkst leek te gaan met usort icm een vergelijk functie (correct me if I'm wrong pls :)).

Ik heb nu het volgende:

PHP:
1
2
3
4
5
6
7
8
9
10
function cmp ($a, $b) {
    $l = $a["stamp"];
    $k = $b["stamp"];
    
    if($k==$l){
        return strcmp($a["title"], $b["title"]);
    } else {
        return strcmp($k, $l);
    }
}


Hij sorteert dus als de stamps gelijk zijn op titel.

De array die gesorteerd moet worden en de manier van aanroepen:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
    // item array sorteren
        $itemArray[0]["title"] = "blaat";
        $itemArray[0]["stamp"] = "234234";
        $itemArray[1]["title"] = "arf";
        $itemArray[1]["stamp"] = "234";
        $itemArray[2]["title"] = "arf";
        $itemArray[2]["stamp"] = "235";
        $itemArray[3]["title"] = "arf";
        $itemArray[3]["stamp"] = "2344345656";
        
    // array sorteren
    usort($itemArray, "cmp");
    
    // array doorlopen
    foreach ($itemArray as $item) {
        
        // item opstellen
        $itemTitel = $item["title"];
        $itemStamp = $item["stamp"];
        
        // item weergeven
        echo "$itemStamp - $itemTitel<br>";
        
    }


Nu wordt hij niet goed gesorteerd, het lijkt alsof hij het alfabetisch doet en niet de grootte van het getal vergelijkt. Is dit wel mogelijk?

Uitkomst van bovenstaande staat hieronder:

code:
1
2
3
4
235 - arf
2344345656 - arf
234234 - blaat
234 - arf

Acties:
  • 0 Henk 'm!

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-05 16:29

Macros

I'm watching...

Je doet ook een strcmp($k, $l); op de stamps, dan is het logisch dat het gecompared is al string. Zoiets zou moeten werken: (misschien moet je het < omzetten in > teken, dat weet ik nooit uit mijn hoofd.
PHP:
1
2
3
4
5
    if($k==$l){ 
        return strcmp($a["title"], $b["title"]); 
    } else { 
        return ($k< $l)? 1 : -1; 
    }

[ Voor 7% gewijzigd door Macros op 08-03-2004 15:13 . Reden: typo ]

"Beauty is the ultimate defence against complexity." David Gelernter


Acties:
  • 0 Henk 'm!

  • TangLeFuzZ
  • Registratie: Juni 2001
  • Laatst online: 28-05-2024
Zucht, thanks... was iets te snel met posten blijkbaar.

Nu gaat het perfect... en euhh, het moet idd > zijn :)