ID: 34963 User updated by: brausepaule at gmx dot de Reported By: brausepaule at gmx dot de Status: Bogus Bug Type: Unknown/Other Function Operating System: Linux Suse 9.3 PHP Version: 5.0.5 New Comment:
It's seems like a Bug. e.g. the comparison between _ and a with strcoll results 1. _ 2. a the comparison beetween _b and aa with strcoll results Linux: 1. aa 2. _b Windows 1. _b 2. aa My workaround for Linux is: function linux_strcoll($a,$b){ $xa = strlen($a); $xb = strlen($b); $x = $xa < $xb ? $xb : $xa; $wert = $i =0; while($i<$x && $wert==0) : $wert = strcoll(substr($a,$i,1),substr($b,$i,1)); $i++; endwhile; return $wert; } The Problem the function makes rendering slower Greats Brause Previous Comments: ------------------------------------------------------------------------ [2005-10-23 22:55:22] [EMAIL PROTECTED] This is not a bug in PHP. PHP uses the Operating System's collation, which apperently collates in this way. There is nothing we can do about it now. In PHP 6 with Unicode support this behavior will be fixed, as ICU's collation algorithm does sort it the correct way. ------------------------------------------------------------------------ [2005-10-23 20:59:48] brausepaule at gmx dot de setlang means setlocale sorry ------------------------------------------------------------------------ [2005-10-23 20:36:06] [EMAIL PROTECTED] What is this "Setlang" you're talking about? ------------------------------------------------------------------------ [2005-10-23 20:13:08] brausepaule at gmx dot de Description: ------------ Under Linux 9.3 the function strcoll ignore the _ Under Windows it's work fine. Reproduce code: --------------- $ar = array('auto', 'beton', 'ätsch', 'ölig', 'test','file 4','file 6','file 7','1 file 2','2 file 1','3 file 3','_file 5'); setlocale (LC_ALL, '[EMAIL PROTECTED]', 'de_DE', 'de', 'ge', 'german'); usort($ar,'strcoll'); while (list ($key, $value) = each ($ar)) echo "$key: $value\n"; Expected result: ---------------- Under Windows (it's correct) 0: _file 5 1: 1 file 2 2: 2 file 1 3: 3 file 3 4: ätsch 5: auto 6: beton 7: file 4 8: file 6 9: file 7 10: ölig 11: test Actual result: -------------- Under Linux: 0: 1 file 2 1: 2 file 1 2: 3 file 3 3: ätsch 4: auto 5: beton 6: file 4 7: _file 5 8: file 6 9: file 7 10: ölig 11: test the setlang works! Without setlang with strcmp it seems like: 0: _file 5 1: 1 file 2 2: 2 file 1 3: 3 file 3 4: auto 5: beton 6: file 4 7: file 6 8: file 7 9: test 10: ätsch 11: ölig ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=34963&edit=1