代码之家  ›  专栏  ›  技术社区  ›  BMBM

对对象进行排序时,某些对象应始终位于第一位

  •  2
  • BMBM  · 技术社区  · 14 年前

    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 回复  |  直到 14 年前
        1
  •  4
  •   Artefacto    14 年前

    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);
    }
    
        2
  •  0
  •   phimuemue    14 年前

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

    在我看来不可能是正确的。

    试着交换一下,看看是否只有其中一个 uid==999 并根据其中哪个值为999返回值。