2013-08-09 2 views
0

У меня есть объект, который примерно так:Возможно ли сортировать объекты по нескольким свойствам с помощью 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 - "Critical", "Высокий", "Средний", "Low", *
  • Prop3 - алфавитный

ответ

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

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