01. december 2009 - 10:37
Der er
8 kommentarer og 1 løsning
sortere multidimensionelt array
hej jeg forsøger at sortere et multidimensionelt array, men kan ikke få det til at fungere jeg vil sortere alfabetisk efter "name" function cmp($a, $b) { $al = strtolower($a['name']); $bl = strtolower($b['name']); if($al == $bl) return 0; else return ($al > $bl) ? 1:-1; } usort($arr, 'cmp'); Array ( [120] => Array ( [name] => Slazenger pink cap [num] => 5 ) [122] => Array ( [name] => Returvarer til export [num] => 1 ) [115] => Array ( [name] => Hagl til luftgevær 5,5 mm [num] => 1 ) [118] => Array ( [name] => Gamo luftpistol 4,5 [num] => 2 ) [114] => Array ( [name] => Gamo hagl 4,5 mm [num] => 4 ) [112] => Array ( [name] => Gamo luftgevær 4,5 mm [num] => 1 ) [113] => Array ( [name] => Luftgevær 4,5 mm [num] => 1 ) [117] => Array ( [name] => Gamo Shadow 1000 luftgevær [num] => 1 )
Annonceindlæg tema
Cloud & AI
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
01. december 2009 - 11:55
#1
Tror du kan bruge denne function taget fra php.net - ksort : function sksort(&$array, $subkey="id", $sort_ascending=false) { if (count($array)) $temp_array[key($array)] = array_shift($array); foreach($array as $key => $val){ $offset = 0; $found = false; foreach($temp_array as $tmp_key => $tmp_val) { if(!$found and strtolower($val[$subkey]) > strtolower($tmp_val[$subkey])) { $temp_array = array_merge( (array)array_slice($temp_array,0,$offset), array($key => $val), array_slice($temp_array,$offset) ); $found = true; } $offset++; } if(!$found) $temp_array = array_merge($temp_array, array($key => $val)); } if ($sort_ascending) $array = array_reverse($temp_array); else $array = $temp_array; } Burde virke med sksort($array, "name", true).
01. december 2009 - 11:56
#2
01. december 2009 - 11:57
#3
Skal lige siges at det ser ud som om, at du mister dine tal værdier i arrayet, altså 120, 122 osv.
01. december 2009 - 13:04
#4
@ michael det er der jeg har eksemplet fra @ norsgaard arrayet bliver slet ikke sorteret når jeg efterfølgende smidet det i en print_r()
01. december 2009 - 13:14
#5
Men du skal gå længere ned til mutiarray: <?php function cmp($a, $b) { return strcmp($a["fruit"], $b["fruit"]); } $fruits[0]["fruit"] = "lemons"; $fruits[1]["fruit"] = "apples"; $fruits[2]["fruit"] = "grapes"; usort($fruits, "cmp"); while (list($key, $value) = each($fruits)) { echo "\$fruits[$key]: " . $value["fruit"] . "\n"; } ?>
01. december 2009 - 13:25
#6
Prøvede lige lokalt med følgende : <?php function sksort(&$array, $subkey, $sort_ascending=false) { if (count($array)) $temp_array[key($array)] = array_shift($array); foreach($array as $key => $val){ $offset = 0; $found = false; foreach($temp_array as $tmp_key => $tmp_val) { if(!$found and strtolower($val[$subkey]) > strtolower($tmp_val[$subkey])) { $temp_array = array_merge( (array)array_slice($temp_array,0,$offset), array($key => $val), array_slice($temp_array,$offset) ); $found = true; } $offset++; } if(!$found) $temp_array = array_merge($temp_array, array($key => $val)); } if ($sort_ascending) $array = array_reverse($temp_array); else $array = $temp_array; } $arr = Array ( "120" => Array ( "name" => "Blazenger pink cap", "num" => "5" ), "122" => Array ( "name" => "Returvarer til export", "num" => "1" ), "115" => Array ( "name" => "Tagl til luftgevær 5,5 mm", "num" => "1" ), "118" => Array ( "name" => "Gamo luftpistol 4,5", "num" => "2" ) ); print_r($arr); echo "<br/>"; sksort($arr, "name", true); print_r($arr); ?> og fik følgende i output : Array ( [120] => Array ( [name] => Blazenger pink cap [num] => 5 ) [122] => Array ( [name] => Returvarer til export [num] => 1 ) [115] => Array ( [name] => Tagl til luftgevær 5,5 mm [num] => 1 ) [118] => Array ( [name] => Gamo luftpistol 4,5 [num] => 2 ) ) Array ( [0] => Array ( [name] => Blazenger pink cap [num] => 5 ) [1] => Array ( [name] => Gamo luftpistol 4,5 [num] => 2 ) [2] => Array ( [name] => Returvarer til export [num] => 1 ) [3] => Array ( [name] => Tagl til luftgevær 5,5 mm [num] => 1 ) ) Så her ser det ud til at den har sorteret der. Ved ikke om du kan bruge det til noget, men det kan vel være et skridt i den rigtige retning...
01. december 2009 - 15:58
#7
smid et svar norsgaard :)
01. december 2009 - 16:03
#8
Glad I could help.
01. december 2009 - 16:44
#9
tak for hjælpen :)
Vi tilbyder markedets bedste kurser inden for webudvikling