Можно ли сортировать объекты по нескольким свойствам, используя usort в PHP?

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

<?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 - Алфавитный

person EGr    schedule 09.08.2013    source источник


Ответы (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);
}

Извините, не проверял, но должно так работать

person Valentin Logvinskiy    schedule 09.08.2013