Использование метода нестатического объекта с usort

Я пытаюсь отсортировать массив значений с помощью метода класса. Значения следующие

$agegroups = array("08","910","1112","1314","1516","1718","1999");

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

private $agegroups = array();

function __construct() {
// retrieve data from the database
while($data = $sth->fetch()) {
$ag = new StdClass();
$ag->low = $data['low'];   //stores the low end of the age group
$ag->high = $data['high']  //stores the high end of the age group
$this->agegroups[$data['key']] = $ag;
}
}

$data['key'] соответствует $agegroups массив, определенный выше. В том же классе я определил метод сортировки

function sort($a,$b) {
$aAG = $this->agegroups[$a];
$bAG = $this->agegroups[$b];

return $aAG->low > $bAG->low ? 1 : -1;
}

Насколько я понимаю, usort может использовать только статический метод. Однако мой объект должен получить значения из базы данных, поэтому я не могу сделать его статичным.

Я попытался использовать анонимную функцию с usort, которая могла бы использовать экземпляр класса, определенного вне функции, но я получаю ошибку о неопределенном объекте.

$agObj = new agegroups();
$agegroups = usort($agegroups, function($a, $b){
global $agObj;
return $agObj->sort($a,$b);
});

Я получаю ошибку Неустранимая ошибка: вызов функции-члена sort () для необъекта

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

0

Решение

Везде, где требуется функция, вы можете использовать array(object, functionName) вызвать метод этого объекта.

usort($agegroups, array($agObj, 'sort'));

Кстати, вы не должны присваивать результат usort вернуться к agegroups, Функции сортировки изменяют массив на месте; они возвращают логическое значение, а не переупорядоченный массив.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]