排序对象,有些应该始终是第一位的

时间:2010-07-06 13:21:44

标签: php sorting

我有一组国家/地区对象,如下所示:

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');

2 个答案:

答案 0 :(得分:4)

strcmp

  

返回<如果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来返回值。