SORT_LOCALE_STRING示例在array_unique中有所不同

时间:2012-06-07 05:08:38

标签: php arrays locale

有没有使用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的示例。

2 个答案:

答案 0 :(得分:1)

我想在德语中,我认为ß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,php5.4rc2)

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

答案 1 :(得分:0)

排序语言环境基本上按当前设置的语言环境排序,例如:

$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', 'Ą');