Я пытаюсь сортировать массив значений с помощью метода класса. Значения следующиеИспользование метода нестатического объекта с 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);
});
Ошибка я получаю Фатальная ошибка: Вызов функции члена рода() на не-объект
Отпускаю я могу создать новый экземпляр объекта внутри анонимной функции, но Я не хочу каждый раз запрашивать базу данных. Есть ли способ использовать мой класс для сортировки этих значений?
Почему вы не можете вызвать вызов 'usort()' внутри класса? – tyteen4a03
Группа $ agegroups поступает из другого datsource. – Robbert
Итак, передайте последний массив '$ agegroups' в функцию, которая будет' usort' массива. – tyteen4a03