排序给出奇怪的结果

时间:2012-11-03 22:22:23

标签: php

我有一系列电子邮件地址,我试图排序,但我得到奇怪的结果。这就是我的意思:

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”出现在同一位置。

3 个答案:

答案 0 :(得分:1)

为确保您在英语中进行比较,请在排序之前将其放入:

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

如果这改变了任何内容并且排序有效,则系统会设置为比较字符串而不是美国/英语。

除此之外,我只能想到空格位于字符串的开头,或者某些空格以大写字母开头,而其他字母则从较低位置开始。要修复套接字符串排序问题,您可以执行以下操作:

  natsort($array);

答案 1 :(得分:0)

ps之前有空格...当我查看您发布的代码时,它是可见的。在排序前制作trim

答案 2 :(得分:0)

也许你正在用一些奇怪的规则进行排序。强制排序模式为“字符串”传递SORT_STRING

sort($array, SORT_STRING);

并告诉我们吐出来的东西。

sort()使用SORT_REGULAR作为默认值,我怀疑带有数字前缀(92 *)的电子邮件被认为是整数,因此是奇怪的排序。