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