我有一系列电子邮件地址,我试图排序,但我得到奇怪的结果。这就是我的意思:
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”出现在同一位置。
答案 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 *)的电子邮件被认为是整数,因此是奇怪的排序。