2

前段时间在查看数组排序的线程时,我想出了以下内容:

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;
}

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

4

2 回答 2

7

使用strcasecmp代替 strcmp。

于 2013-04-14T14:58:12.257 回答
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;
}
于 2014-02-05T06:49:09.363 回答