Felix Riesterer: Sortierung mit Usort, deutsche Sonderzeichen

Beitrag lesen

Liebe(r) Silja,

ich habe das für mich so gelöst:

function normalize_utf8_to_lower_case ($s) {  
    // replacements for lower-case ASCII-characters  
    $r = array(  
        'a'  => 'AaÀÁÂÃÅàáâãåĀāĂ㥹ǍǎǺǻẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặΆ',  
        'ae' => 'ÄäæÆǼǽ',  
        'b'  => 'bB',  
        'c'  => 'CcÇçĆćĈĉĊċČč',  
        'd'  => 'DdÐĎďĐđ',  
        'e'  => 'EeÈÉÊËèéêëĒēĔĕĖėĘęĚěẸẹẺẻẼẽẾếỀềỂểỄễỆệΈ',  
        'f'  => 'Ffƒ',  
        'g'  => 'GgĜĝĞğĠġĢģ',  
        'h'  => 'HhĤĥĦħΉ',  
        'i'  => 'IiÌÍÎÏìíîïĨĩĪīĬĭĮįİıǏǐỈỉỊịΊΐ',  
        'ij' => 'IJij',  
        'j'  => 'JjĴĵ',  
        'k'  => 'KkĶķĸ',  
        'l'  => 'LlĹĺĻļĽľĿŀŁł',  
        'm'  => 'Mm',  
        'n'  => 'NnÑñŃńŅņŇňʼn',  
        'ng' => 'Ŋŋ',  
        'o'  => 'OoÒÓÔÕØòóôõøŌōŎŏŐőƠơǑǒǾǿΌỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợ',  
        'oe' => 'ÖöŒœ',  
        'p'  => 'Pp',  
        'q'  => 'Qq',  
        'r'  => 'RrŔŕŖŗŘř',  
        's'  => 'SsŚśŜŝŞşŠš',  
        'ss' => 'ßß',  
        't'  => 'TtŢţŤťŦŧ',  
        'u'  => 'UuÙÚÛŨũŪūŬŭŮůŰűŲųƯưǓǔǕǖǗǘǙǚǛǜùúûỤụỦủỨứỪừỬửỮữỰự',  
        'ue' => 'Üü',  
        'v'  => 'Vv',  
        'w'  => 'WwŴŵẀẁẂẃẄẅ',  
        'x'  => 'Xx',  
        'y'  => 'YyÝýÿŶŷŸΎỲỳỴỵỶỷỸỹ',  
        'z'  => 'ZzŹźŻżŽž'  
    );  
  
    // replace  
    foreach ($r as $c => $variants) {  
        $s = preg_replace("~[$variants]~su", $c, $s);  
    }  
  
    return $s;  
}  
  
function sort_callback ($a, $b) {  
    return strnatcasecmp(  
        normalize_utf8_to_lower_case($a),  
        normalize_utf8_to_lower_case($b)  
    );  
}

Ist sicherlich nicht perfekt, sollte aber dieses DIN 5007-2 einigermaßen erreichen.

Liebe Grüße,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:| n4:? de:> ss:| ch:? js:) mo:} zu:)