PHP - usort() 部分区分大小写

问题描述 投票:0回答:1

我有以下数组项:

[{
    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()
有什么用处?

php sorting
1个回答
0
投票

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;
});
© www.soinside.com 2019 - 2024. All rights reserved.