Использование PHP usort с условными результатами

Короче говоря, мне нужно отсортировать массив объектов с помощью 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

            // ...
        }
    }

?>

person Hubro    schedule 24.09.2010    source источник


Ответы (2)


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

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

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

person BoltClock    schedule 24.09.2010

Другими способами вы можете вызвать функцию usort из метода.

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