我有以下数组项:
[{
first_name: 'Rebecca'
}, {
first_name: 'amy'
}, {
first_name: 'Amy'
}, {
first_name: 'stacy'
}]
我希望数组根据 first_name 属性按字母顺序排序。在 first_name 属性相同的碰撞中(即
amy
与 Amy
),我希望大写字母的值排在前面。
在上面的数组中,排序后的值应该是:
[{
first_name: 'Amy'
}, {
first_name: 'amy'
}, {
first_name: 'Rebecca'
}, {
first_name: 'stacy'
}]
这是当前自定义的
usort()
我正在使用:
usort($users, function($a, $b){
$first_name_compare = strcasecmp($a['first_name'], $b['first_name']);
return $first_name_compare;
});
strcasecmp()
据说不区分大小写,但我注意到它不一致。在上面的数组示例中,strcasecmp()
有时会在 amy
之前返回 Amy
,反之亦然。
在此用例中,
strcasecmp()
有什么用处?
当
strcasecmp()
返回 0
时,您应该回到 strcmp()
。
usort($users, function($a, $b){
$first_name_compare = strcasecmp($a['first_name'], $b['first_name']);
if ($first_name_compare == 0) {
$first_name_compare = strcmp($a['first_name'], $b['first_name']);
}
return $first_name_compare;
});