php-按多个变量排序列表

php-按多个变量排序列表,php,sorting,Php,Sorting,我正在使用下面的代码按用户名对用户列表进行排序,但我需要sortByName函数的帮助,因为我想按姓氏对列表进行排序,作为辅助项。因此,如果有两个Bob,它将按姓氏字母顺序排列,而不是随机排列。我试着在名字相同的时候添加一个if语句,但我最终以某种方式打破了它 function sortByName($a, $b) { // if($a['first'] == $b['first']) // commented out because it doesn't work //

我正在使用下面的代码按用户名对用户列表进行排序,但我需要sortByName函数的帮助,因为我想按姓氏对列表进行排序,作为辅助项。因此,如果有两个Bob,它将按姓氏字母顺序排列,而不是随机排列。我试着在名字相同的时候添加一个if语句,但我最终以某种方式打破了它

function sortByName($a, $b) {
    // if($a['first'] == $b['first']) // commented out because it doesn't work
    //     return $a['last'] > $b['last'];
    // else
           return $a['first'] > $b['first']; // this works on its own
}

$a = array( // of usernames // );
$userList = array();

foreach($a as $b) {
    $id = $users->fetch_info('id', 'username', $b); // get users' id from their username
    $userList[] = $users->userdata($id); // get users' information (like first and last name)
}

usort($userList, 'sortByName');

foreach($userList as $profile) {
    $u = $profile['username'];
    $first = $profile['first'];
    $last = $profile['last'];

    include 'user-list.php';
}

检查名字是否相似,然后回到姓氏

function sortByName($a, $b) {
    if ($a["first"] === $b["first"]) { // 2 Bobs!
        return strcmp($a["last"], $b["last"]);
    }
    return strcmp($a["first"], $b["first"]);
}
我使用了
strcmp
,使用
stracecmp
进行不区分大小写的排序,使用
strnatcmp
进行自然顺序排序

自然顺序排序主要处理数字:
“a200”
应该在
“a3”
之后