02. april 2007 - 14:51
Der er
8 kommentarer og 1 løsning
Sortering af array
Jeg har et array der ser ud som følger $array = array( 0 => array('id' => 0, 'antal' => 5, 'navn' => 'B'), 1 => array('id' => 1, 'antal' => 6, 'navn' => 'A'), 2 => array('id' => 2, 'antal' => 3, 'navn' => 'D'), 3 => array('id' => 3, 'antal' => 9, 'navn' => 'C') ); Jeg vil gerne have det sorteret efter 'navn', så arrayet kommer til at se ud som følger $array = array( 1 => array('id' => 1, 'antal' => 6, 'navn' => 'A'), 0 => array('id' => 0, 'antal' => 5, 'navn' => 'B'), 3 => array('id' => 3, 'antal' => 9, 'navn' => 'C'), 2 => array('id' => 2, 'antal' => 3, 'navn' => 'D') ); .. selvfølgelig så hurtigt som muligt.
Annonceindlæg fra HP
02. april 2007 - 14:54
#1
Du vil ikke have det sådan her? $array = array( 0 => array('id' => 1, 'antal' => 6, 'navn' => 'A'), 1 => array('id' => 0, 'antal' => 5, 'navn' => 'B'), 2 => array('id' => 3, 'antal' => 9, 'navn' => 'C'), 3 => array('id' => 2, 'antal' => 3, 'navn' => 'D') );
02. april 2007 - 14:58
#2
function cmp($a, $b) {
return strcmp($a["name"], $b["name"]);
}
usort($array, "cmp");
while (list($key, $value) = each($array)) {
echo "\$array[$key]: " .$array["id"]." ".$array["antal"]." ".$array["name"] . "\n";
}
Utestet, men tyvstjålet (næsten) fra
http://php.net/usort
02. april 2007 - 15:09
#3
og det skal nok være echo "\$array[$key]: " .$value["id"]." ".$value["antal"]." ".$value["name"] . "\n";
02. april 2007 - 15:13
#4
Jeg har kigget på usort, men kunne ikke få det til at virke. Indsætter jeg cmp-funktionen og kører print_r($array); usort($array, "cmp"); print_r($array); får jeg Array ( [0] => Array ( [id] => 0 [antal] => 5 [navn] => B ) [1] => Array ( [id] => 1 [antal] => 6 [navn] => A ) [2] => Array ( [id] => 2 [antal] => 3 [navn] => D ) [3] => Array ( [id] => 3 [antal] => 9 [navn] => C ) ) Array ( [0] => Array ( [id] => 3 [antal] => 9 [navn] => C ) [1] => Array ( [id] => 2 [antal] => 3 [navn] => D ) [2] => Array ( [id] => 1 [antal] => 6 [navn] => A ) [3] => Array ( [id] => 0 [antal] => 5 [navn] => B ) ) Jeg vil helst have resultatet, som jeg har skrevet det oprindeligt - også med indeksene som de står. Problemer er at jeg får et array fra et eksternt program, som jeg helst ikke må rette i, men skal udskrive listen alfabetisk.
02. april 2007 - 15:17
#5
Jeg har lige testet erikjacobsens kode. Den virker fint. Du skal bare lige rette: return strcmp($a["name"], $b["name"]); til: return strcmp($a["navn"], $b["navn"]);
02. april 2007 - 15:30
#7
Har fået den til at virke nu! Tusind tak. Fandt også selv Eriks "tastefejl" - og fik det til at virke, men når jeg smed det på min oprindelige kode, hvor jeg selvføglelig havde kaldt den 'name', virkede det ikke - så vist mig der har lavet mest gøgl, når alt kommer til alt. Men tusind tak - smid et svar.
02. april 2007 - 15:34
#8
Ingen point til mig, tak.
02. april 2007 - 15:37
#9
Så lukker jeg igen. Endnu engang tak for hjælpen!
Vi tilbyder markedets bedste kurser inden for webudvikling