сортировать объекты, некоторые всегда должны быть первыми - PullRequest
2 голосов
/ 06 июля 2010

У меня есть коллекция объектов страны, которые выглядят так:

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 ]

4 голосов
/ 06 июля 2010

strcmp :

Возвращает <0, если str1 меньше, чем str2;> 0, если str1 больше, чем str2, и 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);
}
0 голосов
/ 06 июля 2010

Линия

if($a->uid == 999 || $b->uid == 999) return 1;

не может быть правильной, на мой взгляд.

Попробуйте обменять ее, чтобы проверить, действительно ли только один из двух имеет uid==999 и вернуть значение, согласно которому из них имеет значение 999.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...