如何在 PHP 中按字母顺序比较 2 个字符串?
Posted
技术标签:
【中文标题】如何在 PHP 中按字母顺序比较 2 个字符串?【英文标题】:How to compare 2 strings alphabetically in PHP? 【发布时间】:2010-12-08 09:37:45 【问题描述】:标题所说的。特别是如果我有
$array1['name'] = 'zoo';
$array2['name'] = 'fox';
如何确定$array2
的名字按字母顺序排在$array1
的上方?
【问题讨论】:
您可能会发现s($array1['name'])->compareTo($array2['name'])
或s($array1['name'])->compareToIgnoreCase($array2['name'])
很有帮助,如this standalone library 中所示。
【参考方案1】:
使用@987654321@
。如果 strcmp 的第一个参数按字典顺序小于第二个,则返回的值将为负数。如果两者相等,则返回 0。如果第一个在字典上大于第二个,则返回一个正数。
注意。您可能想使用@987654322@(string1,string2)
,它会忽略大小写...
【讨论】:
【参考方案2】:您可以将这两个字符串与strcmp
进行比较:
如果str1小于str2,则返回 如果 str1 大于 str2 则为 0,如果它们相等则为 0。
【讨论】:
【参考方案3】:我来晚了(那么我在 2009 年还不是程序员 :-) 还没有人提到这一点,但你也可以简单地使用你在数字上使用的运算符。
< > <= >= == !=
等
例如:
'a' > 'b'
返回false
'a' < 'b'
返回true
http://php.net/manual/en/language.operators.comparison.php
重要
有一个缺陷,你可以在下面的 cmets 中找到。
【讨论】:
伙计,这绝对是这个帖子的最佳答案,而且没有一个赞成票!如果您只需要比较两个字符串就可以简单地找到按字母顺序排在第一位的字符串,这绝对是更轻巧、最聪明的解决方案。然而,太愚蠢了,它几乎受伤了。 @MarcosBuarque:我很感激。我的回答晚了 8 年 :-) 这不按预期工作。例如,'10' < '2'
的计算结果为 false,即使字符串 '10'
应该在 '2'
之前进行比较,如果您比较 按字母顺序(这就是问题所在)。这是因为每当字符串看起来像整数时,PHP 都会自动将它们转换为整数并按数字而不是按字母顺序进行比较。如果您的目标是真正按字母顺序比较,您应该按照建议使用strcmp()
。【参考方案4】:
我经常使用natsort
(Natural Sort),因为我通常只想保留数组以供以后使用。
例子:
natsort($unsorted_array);
var_dump($usorted_array); // will now be sorted.
【讨论】:
【参考方案5】:sort
EDIT 刚刚实现了来自不同数组的值,可以先array_merge,但不确定这就是你想要的
【讨论】:
以上是关于如何在 PHP 中按字母顺序比较 2 个字符串?的主要内容,如果未能解决你的问题,请参考以下文章