就像标题所说的那样。具体来说,如果我有
$array1['name'] = 'zoo';
$array2['name'] = 'fox';
我怎样才能确定按字母顺序排列时$array2
的名称应该出现在$array1
之上?
使用strcmp
函数。如果strcmp的第一个参数在字典上小于第二个参数, 那么返回值将为负数。如果两个参数相等,则返回0。如果第一个参数在字典上大于第二个参数,则返回正数。
注意:您可能希望使用strcasecmp(string1,string2)
函数,它会忽略大小写...
我有点晚了(再说一遍,2009年时我还不是程序员 :-))但还没有人提到这个,你可以直接使用与数字相同的运算符。
< > <= >= == !=
以及更多
例如:
'a' > 'b'
返回 false
'a' < 'b'
返回 true
http://php.net/manual/en/language.operators.comparison.php
重要提示:
下面的评论中有一个漏洞。
'10' < '2'
的结果为false,尽管按照字母顺序比较,字符串'10'
应该排在字符串'2'
之前。这是因为每当字符串看起来像整数时,PHP会自动将它们转换为整数并按数字方式比较,而不是按字母方式比较。如果你的目标是真正按字母表顺序比较,建议使用strcmp()
。 - jlh我经常使用natsort
(自然排序),因为我通常只是想保留数组以供以后使用。
例子:
natsort($unsorted_array);
var_dump($usorted_array); // will now be sorted.
s($array1['name'])->compareTo($array2['name'])
或者s($array1['name'])->compareToIgnoreCase($array2['name'])
很有用,这些方法可以在这个独立的库中找到。 - caw