是否可以使用PHP中的usort按多个属性对对象进行排序?

时间:2013-08-09 22:14:29

标签: php sorting object usort

我有一个像这样的对象:

<?php
class Change {
        private $prop1, $prop2, $prop3;

        public function __construct($prop1, $prop2, $prop3) {
                $this->$prop1=$prop1;
                $this->$prop2=$prop2;
                $this->$prop3=$prop3;
        }

        public function getProp1() {
                return $this->prop1;
        }

        public function getProp2() {
                return $this->prop2;
        }

        public function getProp3() {
                return $this->prop3;
        }
}
?>

我删除了一些细节,但这通常是对象的内容。现在,我想对顶部prop1不等于NULL的对象进行排序,然后按prop2的特定值排序。 Prop2可以等于“高”,“中”,“低”,“严重”或用户输入的任何其他值。我想按此顺序对它们进行排序:严重,高,中,低,其他一切。最后,我想按字母顺序排序prop3

这可能与usort有关吗?有更简单的方法吗?

排序顺序:

  • Prop1 - 不是NULL
  • Prop2 - “严重”,“高”,“中”,“低”,*
  • Prop3 - 按字母顺序排列

1 个答案:

答案 0 :(得分:1)

function sort($a,$b){
    $criteria = array('Critical'=>4,'High'=>3,'Medium'=>2,'Low'=>1);
    if($a.Prop1 != NULL && $b.Prop1 == NULL) return -1;
    if($criteria[$a.Prop2] != $criteria[$b.Prop2]) {
        if($criteria[$a.Prop2] < $criteria[$b.Prop2]){
            return -1;
        }else{
            return 1;
        }
    }
    return strcmp($a.Prop3,$b.Prop3);
}

抱歉,我没有测试它,但必须以这种方式工作