FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Flitig postare
|
Låt oss säga att jag har en array enligt exemplet nedan:
Kod:
$player[0]['name'] = 'Björn'; $player[0]['nr'] = 2; $player[0]['id'] = 1; $player[1]['name'] = 'Mia'; $player[1]['nr'] = 7; $player[1]['id'] = 2; $player[2]['name'] = 'Kalle'; $player[2]['nr'] = 4; $player[2]['id'] = 3; $player[3]['name'] = 'Anna'; $player[3]['nr'] = 12; $player[3]['id'] = 4; Kod:
for($i = 0; $i sizeof($player); $i++){ echo $player[$i]['name'] . ', '; } Låt oss säga att jag skulle vilja få ut det hela enligt bokstavsordning, eller att det sorteras ut efter id eller nr. Hur gör jag då? Jag har lekt med array_multisort utan direkt lyckade resultat. Någon som kan ge ett exempel? |
||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Mycket flitig postare
|
||||
![]() |
![]() |
![]() |
#3 | |||
|
||||
Flitig postare
|
Det är inga problem alls:
Kod:
$player = array(); $player[0]['name'] = 'Björn'; $player[0]['nr'] = 2; $player[0]['id'] = 1; $player[1]['name'] = 'Mia'; $player[1]['nr'] = 7; $player[1]['id'] = 2; $player[2]['name'] = 'Kalle'; $player[2]['nr'] = 4; $player[2]['id'] = 3; $player[3]['name'] = 'Anna'; $player[3]['nr'] = 12; $player[3]['id'] = 4; $name = array(); $nr = array(); $id = array(); foreach($player as $k => $v) { $name[$k] = $v['name']; $id[$k] = $v['id']; $nr[$k] = $v['nr']; } //Sort on name array_multisort($name, SORT_ASC, $id, $nr, $player); print_r($player); //Sort on id array_multisort($id, SORT_ASC, $name, $nr, $player); print_r($player); //Sort on nr array_multisort($nr, SORT_ASC, $id, $name, $player); print_r($player); |
|||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Flitig postare
|
Citat:
|
||
![]() |
![]() |
![]() |
#5 | |||
|
||||
Flitig postare
|
Citat:
![]() Det första du gör (foreach) är att skapa referensarrayer för att få fram kolumnerna som du kan sortera utifrån. Sedan sorterar du $player ASC (stigande) utifrån referensarrayen $name o.s.v. för de andra sorteringskolumnerna. Kan inte påstå att jag är riktigt haj på det där, men jag vet att det fungerar om man gör som jag visade. ![]() |
|||
![]() |
![]() |
![]() |
#6 | ||
|
|||
Flitig postare
|
Citat:
Lösningen verkar en aning komplicerad, men funkar det så funkar det. ![]() Någon annan som har mer att tillägga så får ni gärna göra det, för att reda upp detta ännu mer. T.ex. Måste man verkligen skapa en referennsearray? En annan fråga som har med det hela att göra. Finns det någon skillnad på att skapa arrayen $player[$i]['name'] och $player['name'][$i], rent tekniskt då. Fördelar och nackdelar? |
||
![]() |
![]() |
![]() |
#7 | ||
|
|||
Mycket flitig postare
|
Även om du efterfrågar hjälp med multisort tycker jag att usort är en bättre lösning (eftersom jag misstänker att du vill hålla ihop datat).
Kod:
function compare_helper($a, $b) { if ($a == $b) return 0; if ($a < $b) return -1; return 1; } function compare_name($a, $b) { return compare_helper($a['name'], $b['name']); } function compare_nr($a, $b) { return compare_helper($a['nr'], $b['nr']); } function compare_id($a, $b) { return compare_helper($a['id'], $b['id']); } // Exempel: usort($player, "compare_name"); |
||
![]() |
![]() |
![]() |
#8 | ||
|
|||
Flitig postare
|
Citat:
|
||
![]() |
![]() |
![]() |
#9 | ||
|
|||
Flitig postare
|
Citat:
Tar upp denna tråden då det har uppkommit en fråga till. Sorteringen fungerade bra men! (alltid ett men... ![]() Kod:
$player[0]['name'] = 'Björn'; $player[0]['nr'] = 2; $player[0]['id'] = 1; $player[1]['name'] = 'Mia'; $player[1]['nr'] = 7; $player[1]['id'] = 2; $player[2]['name'] = 'Kalle'; $player[2]['nr'] = 4; $player[2]['id'] = 3; $player[3]['name'] = 'Anna'; $player[3]['nr'] = 12; $player[3]['id'] = 4; Så att om två st heter Anna, så skall andra sorteringen ske efter id. ex. Anna, id 1 Anna, id 2 Som det är nu kan det mycket möjligt bli tvärtom. Tack för visat intresse! |
||
![]() |
![]() |
![]() |
#10 | ||
|
|||
Mycket flitig postare
|
Om du utgår ifrån mitt exempel med usort så behöver du ju bara skapa en till compare funktion som du använder.
Kod:
function compare_name_id($a, $b) { $sort = compare_name($a, $b); if (0 == $sort) return compare_id($a, $b); return $sort; } |
||
![]() |
![]() |
Svara |
|
|