如何在PHP中按字母顺序比较两个字符串?

72

就像标题所说的那样。具体来说,如果我有

$array1['name'] = 'zoo';
$array2['name'] = 'fox';

我怎样才能确定按字母顺序排列时$array2的名称应该出现在$array1之上?


5个回答

113

使用strcmp函数。如果strcmp的第一个参数在字典上小于第二个参数, 那么返回值将为负数。如果两个参数相等,则返回0。如果第一个参数在字典上大于第二个参数,则返回正数。

注意:您可能希望使用strcasecmp(string1,string2)函数,它会忽略大小写...


15
你可以使用strcmp函数比较这两个字符串:

如果str1小于str2,则返回小于0的值;如果str1大于str2,则返回大于0的值,如果它们相等,则返回0。


11

我有点晚了(再说一遍,2009年时我还不是程序员 :-))但还没有人提到这个,你可以直接使用与数字相同的运算符。

< > <= >= == != 以及更多

例如:

'a' > 'b' 返回 false

'a' < 'b' 返回 true

http://php.net/manual/en/language.operators.comparison.php

重要提示:

下面的评论中有一个漏洞。


1
这绝对是这个帖子中最好的答案,却没有一个赞!如果你只需要比较两个字符串来找出哪个按字母顺序排在前面,那么这绝对是更轻巧、更聪明的解决方案。然而,它太愚蠢了,几乎让人感到痛苦。 - Marcos Buarque
1
@MarcosBuarque:非常感谢。我只是回答晚了8年 :-) - JMRC
9
这并不像预期的那样工作。例如,'10' < '2' 的结果为false,尽管按照字母顺序比较,字符串'10'应该排在字符串'2'之前。这是因为每当字符串看起来像整数时,PHP会自动将它们转换为整数并按数字方式比较,而不是按字母方式比较。如果你的目标是真正按字母表顺序比较,建议使用strcmp() - jlh

2

我经常使用natsort自然排序),因为我通常只是想保留数组以供以后使用。

例子:

natsort($unsorted_array);

var_dump($usorted_array); // will now be sorted.

1

sort

编辑:刚刚意识到来自不同数组的值,可以先array_merge,但不确定这是否是您想要的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接