2010-09-24 2 views
2

Короче говоря, мне нужно отсортировать массив объектов, используя usort, и мне нужно сообщить нам, какие поля в объектах сортировать.Использование PHP usort с условными результатами

Очевидным решением является создание десятков отдельных функций сортировки usort, но это кажется сорт избыточным и уродливым. В большинстве случаев объекты будут сортироваться по вводу из $ _GET, но не всегда, поэтому я не хочу сортировать по переменным $ _GET напрямую.

Возможно ли, чтобы функция usort использовала функцию сортировки текущего класса? Что-то вроде этого

<?php 

    class myClass 
    { 
     public $myArray; 
     private $by; 

     public function filter($by) 
     { 
      $this->by = $by; 
      usort($this->myArray, /* Somehow point to the following function: */); 
     } 

     private function srt($a, $b) 
     { 
      $c = $this->by; // <- reaching a third variable 

      // ... 
     } 
    } 

?> 

ответ

2

Да, передать массив объекта и имя метода usort():

usort($this->myArray, array($this, 'srt')); 

EDIT: Я проверил и обнаружил, что это будет работать с частными методами, если вы вызываете usort() в том же классе, который содержит частный метод.

+0

+1. Очень хорошая идея. – pltvs

Смежные вопросы