php - 按多个变量排序列表

时间:2014-06-18 16:53:57

标签: php sorting

我正在使用下面的代码按名字对用户列表进行排序,但我需要有关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';
}

1 个答案:

答案 0 :(得分:1)

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

function sortByName($a, $b) {
    if ($a["first"] === $b["first"]) { // 2 Bobs!
        return strcmp($a["last"], $b["last"]);
    }
    return strcmp($a["first"], $b["first"]);
}

我使用strcmp,使用strcasecmp进行不区分大小写的排序,使用strnatcmp进行自然排序。

自然顺序排序主要涉及数字:"a200"应该在"a3"之后。