我有一组国家/地区对象,如下所示:
class country {
public $uid;
public $name;
}
现在我应该对它们进行排序。 id == 999的一个国家应该始终是集合中的第一个,其余的应该按名称排序。所以,我认为usort实际应该做的伎俩,但排序是不正确的。我试过这个:
function mySortCallback($a, $b) {
if($a->uid == 999 || $b->uid == 999) return 1;
return strcmp($a->name, $b->name);
}
usort($myCollection, 'mySortCallback');
答案 0 :(得分:4)
返回<如果str1小于str2,则为0; >如果str1大于str2,则为0;如果它们相等,则为0,如果它们相等,则为0。
试试这个:
private function mySortCallback($a, $b) {
if ($a->uid == 999)
return -1;
elseif ($b->uid == 999)
return 1;
else
return strcmp($a->name, $b->name);
}
答案 1 :(得分:0)
该行
if($a->uid == 999 || $b->uid == 999) return 1;
是不正确的。
尝试交换它以检查实际上只有两个中的一个有uid==999
并根据它们中的哪一个具有值999来返回值。