Det ser ud til at det alfabet du bruger er ISO latin 8879 hvor bogstavkoderne for æ,ø og å er tildelt i en rækkefølge der vil give det resultat.
du kan se række følgen på diverse specielle nationale bogstaver her:
http://hjem.get2net.dk/Jakob.Aggernaes/htisolat.htmlmed phoenixv's bruger definerede sortering 'usort' kan du lave en sammenligningsfunktion for strenge:
function dincompare( $a, $b ) {
// compare 2 strings encoded with 8-bit characters according
// to a predefined ordering rule
static $alfabet = array(
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // kontrolbogstaver
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, // kontrolbogstaver
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, //
48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
96, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, // a-z => A-Z
80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,123,124,125,126,127,
128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
192,193,194,195,196,302,300,199,200,201,202,203,204,205,206,207, // Å => 302, Æ => 300
208,209,210,211,212,213,214,215,301,217,218,219,220,221,222,223, // Ø => 301
224,225,226,227,228,302,300,231,232,233,234,235,236,237,238,239, // Å => 302, Æ => 300
240,241,242,243,244,245,246,247,301,249,250,251,252,253,254,255 // Ø => 301
);
// $alfabet definerer en vægt for hvert bogstav
// i alfabetet ISO latin 8879.
$lgt = min( strlen($a), strlen($b) ):
for ( $i = 0; $i < $lgt; $i++ )
if $alfabet[ ord( $a[$i] ) ] != $alfabet[ ord( $b[$i] ) ] ) break;
if ( $i == $lgt ) {
// reached end of either string. order by length
$res = strlen($a) - strlen($b);
} else {
// reached different letters. order by alfabet veight
$res = $alfabet[ ord( $a[$i] ) ] - $alfabet[ ord( $b[$i] );
}
if ( $res > 0 ) return 1; // $a > $b
if ( $res == 0 ) return 0; // $a == $b
return -1; // $a < $b
} //endfunction dincompare
//du kan nu sortere dit array af strenge med:
usort( $ditarray, "dincompare" );
men nu vi er igang bør svensk ö og dansk ø vel egentlig sorteres med samme vægt.
og de andre specialbogstaver skal vel også have en mere 'korrekt' vægt.
mvh JakobA