2010-09-24 30 views
2

长话短说,我需要使用usort对一个对象数组进行排序,并且我需要告诉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')); 

编辑:我测试过,发现这将与私有方法的工作只要您在包含私有方法的相同类中调用usort()即可。

+0

+1。非常好的主意。 – pltvs 2010-09-24 09:10:27