前段时间查看数组排序的主题,我提出了以下内容:
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;
}
上面的代码工作正常,唯一的问题是它区分大小写,而我希望它不区分大小写。 如果不重写整个事情,是否可能?
答案 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;
}