SORT_LOCALE_STRING在array_unique中发挥作用的示例


Example of SORT_LOCALE_STRING making a difference in array_unique

是否有任何使用SORT_LOCALE_STRING的示例,在使用array_unique时,它会给出与默认SORT_STRING不同的结果?

下面是一些代码,演示如何在SORT_STRING、SORT_REGULAR SORT_NUMERIC之间获得不同的结果。

<?php
$list = array(
  '0',
  null,
  0,
  10,
  '10.0',
  '1e1',
  false,
  ''
);
var_dump(array_unique($list));
var_dump(array_unique($list, SORT_NUMERIC));
var_dump(array_unique($list, SORT_REGULAR));

输出:

array(5) {
  [0]=>
  string(1) "0"
  [1]=>
  NULL
  [3]=>
  int(10)
  [4]=>
  string(4) "10.0"
  [5]=>
  string(3) "1e1"
}
array(2) {
  [0]=>
  string(1) "0"
  [3]=>
  int(10)
}
array(4) {
  [0]=>
  string(1) "0"
  [1]=>
  NULL
  [3]=>
  int(10)
  [7]=>
  string(0) ""
}

请帮我找到一个显示SORT_LOCALE_STRING用途的示例。

我想在德语中,我认为ßss在词典上是平等的。基本上,它们应该被视为相同的字符并因此排序。如果您不使用区分语言环境的字符串比较(排序是字符串比较),那么我认为很明显这两个字符串不会相等。

$array = array('ß', 't', 'ss');
//binary safe transport of the above chars as present in my text editor
$array = unserialize(base64_decode('YTozOntpOjA7czoxOiLfIjtpOjE7czoxOiJ0IjtpOjI7czoyOiJzcyI7fQ=='));
setlocale(LC_ALL, 'de_DE@euro', 'de_DE', 'deu_deu');
echo setlocale(LC_ALL, '0'), "'n";
var_dump(strcoll('ß', 'ss'));
var_dump(array_unique($array, SORT_LOCALE_STRING));

产量,在我的机器上(Win7,PHP 5.4RC2)

German_Germany.1252
int(0)
array(2) {
  [0]=>
  string(1) "ß"
  [1]=>
  string(1) "t"
}

排序区域设置基本上是按当前设置的区域设置排序,例如:

$array = array('C', 'A', 'Ą');
setlocale(LC_ALL, 'lt_LT');
sort($array, SORT_LOCALE_STRING);
var_dump($array)
//will output $array = array('Ą', 'A', 'C'), 
//without flag
//$array = array('A', 'C', 'Ą');