Я пытаюсь отсортировать массив значений с помощью метода класса. Значения следующие
$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 () для необъекта
Я освобождаю, я могу создать новый экземпляр объекта внутри анонимной функции, но я не хочу каждый раз запрашивать базу данных. Есть ли способ использовать мой класс для сортировки этих значений?
Везде, где требуется функция, вы можете использовать array(object, functionName)
вызвать метод этого объекта.
usort($agegroups, array($agObj, 'sort'));
Кстати, вы не должны присваивать результат usort
вернуться к agegroups
, Функции сортировки изменяют массив на месте; они возвращают логическое значение, а не переупорядоченный массив.
Других решений пока нет …