使用PHP usort和条件结果

时间:2010-09-24 08:58:03

标签: php arrays usort

长话短说,我需要使用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 个答案:

答案 0 :(得分:2)

是的,将对象和方法名称的数组传递给usort()

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

编辑:我已经测试过,只要您在包含私有方法的同一个类中调用usort(),就可以使用私有方法。

答案 1 :(得分:0)

从方法内部调用usort函数的其他方式。

usort($this->myArray, 'myClass::srt');
usort($this->myArray, array(self::class, 'srt'));