code_junkie

How to sort an array of UTF-8 strings?

Nov 11th, 2011
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.99 KB | None | 0 0
  1. $array=array('Birnen', 'Äpfel', 'Ungetüme', 'Apfel', 'Ungetiere', 'Österreich');
  2. $oldLocal=setlocale(LC_COLLATE, "0");
  3. var_dump(setlocale(LC_COLLATE, 'German_Germany.65001'));
  4. usort($array, 'strcoll');
  5. var_dump(setlocale(LC_COLLATE, $oldLocal));
  6. var_dump($array);
  7.  
  8. string(20) "German_Germany.65001"
  9. string(1) "C"
  10. array(6) {
  11. [0]=>
  12. string(6) "Birnen"
  13. [1]=>
  14. string(9) "Ungetiere"
  15. [2]=>
  16. string(6) "Äpfel"
  17. [3]=>
  18. string(5) "Apfel"
  19. [4]=>
  20. string(9) "Ungetüme"
  21. [5]=>
  22. string(11) "Österreich"
  23. }
  24.  
  25. string(19) "German_Germany.1252"
  26. string(1) "C"
  27. array(6) {
  28. [0]=>
  29. string(11) "Österreich"
  30. [1]=>
  31. string(6) "Äpfel"
  32. [2]=>
  33. string(5) "Apfel"
  34. [3]=>
  35. string(6) "Birnen"
  36. [4]=>
  37. string(9) "Ungetüme"
  38. [5]=>
  39. string(9) "Ungetiere"
  40. }
  41.  
  42. $array=array('Birnen', 'Äpfel', 'Ungetüme', 'Apfel', 'Ungetiere', 'Österreich');
  43. $oldLocal=setlocale(LC_COLLATE, "0");
  44. var_dump(setlocale(LC_COLLATE, 'German_Germany.1252'));
  45. usort($array, 'strcoll');
  46. var_dump(setlocale(LC_COLLATE, $oldLocal));
  47. var_dump($array);
  48.  
  49. function traceStrColl($a, $b) {
  50. $outValue = strcoll($a, $b);
  51. echo "$a $b $outValuern";
  52. return $outValue;
  53. }
  54.  
  55. $array=array('Birnen', 'Äpfel', 'Ungetüme', 'Apfel', 'Ungetiere', 'Österreich');
  56. setlocale(LC_COLLATE, 'German_Germany.65001');
  57. usort($array, 'traceStrColl');
  58. print_r($array);
  59.  
  60. function traceStrColl($a, $b) {
  61. $outValue=strcoll($a, $b);
  62. echo "$a $b $outValuern";
  63. return $outValue;
  64. }
  65.  
  66. $locale=(defined('PHP_OS') && stristr(PHP_OS, 'win')) ? 'German_Germany.65001' : 'de_DE.utf8';
  67.  
  68. $string="ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜabcdefghijklmnopqrstuvwxyzäöüß";
  69. $array=array();
  70. for ($i=0; $i<mb_strlen($string, 'UTF-8'); $i++) {
  71. $array[]=mb_substr($string, $i, 1, 'UTF-8');
  72. }
  73. $oldLocale=setlocale(LC_COLLATE, "0");
  74. var_dump(setlocale(LC_COLLATE, $locale));
  75. usort($array, 'traceStrColl');
  76. setlocale(LC_COLLATE, $oldLocale);
  77. var_dump($array);
  78.  
  79. function traceStrColl($a, $b) {
  80. $outValue=strcoll($a, $b);
  81. echo "$a $b $outValuern";
  82. return $outValue;
  83. }
  84.  
  85. $locale=(defined('PHP_OS') && stristr(PHP_OS, 'win')) ? 'German_Germany.65001' : 'de_DE.utf8';
  86.  
  87. $string="ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜabcdefghijklmnopqrstuvwxyzäöüß";
  88. $array=array();
  89. for ($i=0; $i<mb_strlen($string, 'UTF-8'); $i++) {
  90. $array[]=mb_substr($string, $i, 1, 'UTF-8');
  91. }
  92. $oldLocale=setlocale(LC_COLLATE, "0");
  93. var_dump(setlocale(LC_COLLATE, $locale));
  94. usort($array, 'traceStrColl');
  95. setlocale(LC_COLLATE, $oldLocale);
  96. var_dump($array);
  97.  
  98. string(20) "German_Germany.65001"
  99. a B 2147483647
  100. [...]
  101. array(59) {
  102. [0]=>
  103. string(1) "c"
  104. [1]=>
  105. string(1) "B"
  106. [2]=>
  107. string(1) "s"
  108. [3]=>
  109. string(1) "C"
  110. [4]=>
  111. string(1) "k"
  112. [5]=>
  113. string(1) "D"
  114. [6]=>
  115. string(2) "ä"
  116. [7]=>
  117. string(1) "E"
  118. [8]=>
  119. string(1) "g"
  120. [...]
  121.  
  122. string(10) "de_DE.utf8"
  123. a B -1
  124. [...]
  125. array(59) {
  126. [0]=>
  127. string(1) "a"
  128. [1]=>
  129. string(1) "A"
  130. [2]=>
  131. string(2) "ä"
  132. [3]=>
  133. string(2) "Ä"
  134. [4]=>
  135. string(1) "b"
  136. [5]=>
  137. string(1) "B"
  138. [6]=>
  139. string(1) "c"
  140. [7]=>
  141. string(1) "C"
  142. [...]
  143.  
  144. locale -a
Add Comment
Please, Sign In to add comment