28. juli 2005 - 15:45
Der er
3 kommentarer og 1 løsning
Avanceret sortering af multidimensionelt array.. HJÆLP!
Hejsa, Jeg har et multidimensionelt array, som jeg vil sortere efter to værdier. Det er lidt svært at forklare, men jeg har herunder lavet et eksempel: Følgende array... Array ( [0] => Array ( [input] => 0 [hits] => 3 [purehits] => 2 ) [1] => Array ( [input] => 4 [hits] => 5 [purehits] => 0 ) [2] => Array ( [input] => 7 [hits] => 0 [purehits] => 5 ) [3] => Array ( [input] => 12 [hits] => 2 [purehits] => 2 ) [4] => Array ( [input] => 14 [hits] => 2 [purehits] => 3 ) ) ...skal først sorteres efter antallet af 'purehits' og derefter efter antallet af 'hits'. Dvs. det sorterede array skal se sådan ud: Array ( [0] => Array ( [input] => 7 [hits] => 0 [purehits] => 5 ) [1] => Array ( [input] => 14 [hits] => 2 [purehits] => 3 ) [2] => Array ( [input] => 0 [hits] => 3 [purehits] => 2 ) [3] => Array ( [input] => 12 [hits] => 2 [purehits] => 2 ) [4] => Array ( [input] => 4 [hits] => 5 [purehits] => 0 ) ) Hvordan gør man det?
Annonceindlæg fra HP
Jeg har lavet en funktion, som sorterer på en værdi: --- # Returnerer et sorteret multidimensionelt array ’$arr’ sorteret # efter den valgte ’$key’ og den valgte retning (op eller ned) 'order': # Lille->Stor: Order = 1 # Stor->Lille: Order != 1 function multiSort($arr,$key,$order){ if ($order == 1){ if (is_numeric($arr[0][$key])) { $compare = create_function('$a,$b','return 1*$a["'.$key.'"]-1*$b["'.$key.'"];'); } else { $compare = create_function('$a,$b','return strcasecmp($a["'.$key.'"],$b["'.$key.'"]);'); } } else { if (is_numeric($arr[0][$key])) { $compare = create_function('$a,$b','return 1*$b["'.$key.'"]-1*$a["'.$key.'"];'); } else { $compare = create_function('$a,$b','return strcasecmp($b["'.$key.'"],$a["'.$key.'"]);'); } } usort($arr,$compare); return $arr; } --- Jeg kan bare ikke overskue hvordan den kan skrives om til at sortere på flere værdier end kun en.
Er der ikke nogen der kan hjælpe?? .. :'(
Prøv med: function cmp( $a, $b ) { if ( $a['purehits'] == $b['purehits']) { if ( $a['hits'] == $b['hits']) { return 0; } return ( $a['hits'] < $b['hits'] ) ? -1 : 1; } return ( $a['purehits'] < $b['purehits'] ) ? -1 : 1; } usort( $dit_array, 'cmp' );
Jeg rettede den lidt til, men den virker =) Takker!
Vi tilbyder markedets bedste kurser inden for webudvikling