1

array_unique を使用すると、デフォルトの SORT_STRING とは異なる結果になる SORT_LOCALE_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考えられています。基本的に、それらは同じ文字と見なされ、そのようにソートされます。ロケールに依存する文字列比較(並べ替えは文字列比較)を使用しない場合、これら2つの文字列が等しいと比較されないことは明らかだと思います。

$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));

私のマシンでは、yields(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 に答える