Permalänk
Medlem

sortera array

Undrar om det är någon som vet om man kan sortera två arrayer samtidigt utefter den ena bara....

har den här koden
$a= Array ( [0] => stefan abrahamsson [1] => Björn Gustanvsson [2] => Staffan Broberg )
$b=Array ( [0] => 1 [1] => 2 [2] => 1 )

jag vill nu sortera $b så den blir i storleksordning med den största först. Detta kan jag ju göra med rsort($b); Problemet då är ju att [0]=>2 osv.. och vill jag även att $a ska sorteras för $a[0] och $b[0] hör ihop.. och bytar man i $b[] så blir ju inte paren matchande.

Det jag vill få ut av allting i slutändan är att jag ska göra en varialbel som innehåller namnen med en siffra efter och ett komma efter varje sifra.
t.ex.
Björn Gustavsson 2, Stefan Abrahamsson 1, Staffan Broberg 1

Någon som har ett förslag?

Visa signatur

StB

Permalänk
Medlem

Det är ju bara att du skriver en sorteringsalgoritm för en vanlig array sen så ser du till
att varje gång du byter plats på värden i den arrayen så byter du också värden i den andra
på samma positioner.

Permalänk
Medlem

om jag får det såhär då?
Array ( [0] => stefan abrahamsson 1 [1] => Björn Gustanvsson 2 [2] => Martin Sjöberg 0 [3] => Staffan Broberg 1 )

Det går inte att sortera på bara sifran efter namnet? Tar man bara sort tar den i alfabetisk ordning.

Har även provat nåt sort(array, SORT_NUMERIC); men det blev inte bra alls.. vet inte hur den sorterade då..

Visa signatur

StB

Permalänk
Medlem

Du får nog först plocka ihop båda arrayerna till en och sen köra en usort.
Har aldrig använt usort förut men det är den du kommer få använda.
http://se.php.net/manual/en/function.usort.php

for ($i=0; $i<count($a); $i++) { $c[$i]["a"] = $a[$i]; $c[$i]["b"] = $b[$i]; } function cmp($a, $b) { if ($a["b"] == $b["b"]) return 0; return ($a["b"] < $b["b"]) ? -1 : 1; } usort($c, "cmp");

Den borde fungera, vänd på krokodilhuvet om den ska ska sortera med högsta först.

edit: Med usort får du själv bestämma hur den ska sortera, i det här fallet är det cmp som sorterar.

Permalänk
Medlem

du får skriva en egen algoritm. hmm, hittade en Combsort11 som jag skrivit i Java.
Lade in arr2 där, så ser du att den gör samma sak på båda arrayerna.
Du får själv skriva om till önskat språk.

double sfactor = 1.279604943109628; String tmp2; int gap, tmp; int swapped = 0; gap = (int) (arr.length/sfactor); for(int j=0; j<arr.length; j++){ gap = (int) (gap/sfactor); if(gap == 10 || gap == 9) gap = 11; if(gap < 1) gap = 1; for(int i=0; i+gap<arr.length; i++){ if(arr[i] > arr[i+gap]){ tmp = arr[i+gap]; //arr med siffror arr[i+gap] = arr[i]; //arr med siffror arr[i] = tmp; //arr med siffror tmp2 = arr2[i+gap]; //arr2 med namn arr2[i+gap] = arr2[i]; //arr2 med namn arr2[i] = tmp2; //arr2 med namn swapped++; } } if(gap == 1 && swapped == 0) break; else swapped = 0; }