不区分大小写的排序数组

时间:2013-04-14 14:53:47

标签: php arrays sorting

前段时间查看数组排序的主题,我提出了以下内容:

public function sortList(&$objects, $on, $order = 'ASC') {
    $comparer = ($order === 'DESC') 
    ? "return -strcmp(\$a->{$on},\$b->{$on});" 
    : "return strcmp(\$a->{$on},\$b->{$on});"; 
usort($objects, create_function('$a,$b', $comparer)); 
return $objects;
}

上面的代码工作正常,唯一的问题是它区分大小写,而我希望它不区分大小写。 如果不重写整个事情,是否可能?

2 个答案:

答案 0 :(得分:5)

使用strcasecmp代替strcmp。

答案 1 :(得分:0)

已经给出了使用strcasecmp()的答案,但是通过使用适当的闭包可以使你的功能更加清晰:

public function sortList(array &$objects, $on, $order = 'ASC') 
{
    $multiplier = $order == 'ASC' ? 1 : -1;

    usort($objects, function($a, $b) use ($on, $multiplier) {
        return $multiplier * strcasecmp($a->{$on}, $b->{$on});
    });

    return $objects;
}