1

是否有任何使用 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 用法的示例。

4

2 回答 2

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"
}
于 2012-06-07T06:12:57.947 回答
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', 'Ą');
于 2012-06-07T05:22:10.293 回答