1

並べ替えようとしている電子メール アドレスの配列がありますが、奇妙な結果が得られます。これが私が意味することです:

sort($array);
print_r($array);
...[79] => 91******@******.com [80] => 9l***@**********.com 
[81] => ps*******@**********.com [82] => a.c******@*****.com 
[83] => a.d****@*****.com...

p で始まる電子メールが数字の後と A の前に混在する原因は何ですか?

そのメール アドレスをデータベースから削除して「testing」に置き換えたところ、「testing」が同じ位置に表示されました。

4

3 に答える 3

1

英語で比較していることを確認するには、並べ替えの前にこれを入れます。

  setlocale (LC_COLLATE, 'en_US');
  sort($array);

これにより何かが変更され、ソートが機能する場合、システムは文字列を US/English として比較するように設定されています。

それ以外は、文字列の先頭にあるスペース、または大文字で始まるスペースと小文字で始まるスペースしか考えられません。大文字と小文字を区別した文字列の並べ替えの問題を修正するには、次のようにします。

  natsort($array);
于 2012-11-03T22:38:37.747 に答える
0

奇妙なルールでソートしている可能性があります。SORT_STRING を渡して、並べ替えモードを「文字列」に強制します

sort($array, SORT_STRING);

そして、それが何を吐き出したか教えてください。

sort() はデフォルトとして SORT_REGULAR を使用します。数字の接頭辞 (92*) を持つメールは整数と見なされるため、奇妙な並べ替えになっていると思われます。

于 2012-11-03T22:58:35.020 に答える
0

前にスペースがありますps...投稿したコードを調べたところ、表示されています。ソートtrim前に作成します。

于 2012-11-03T22:48:13.667 に答える