我正在尝试使用类方法对值数组进行排序。 值如下
$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
.排序函数就地修改数组;它们返回布尔值,而不是重新排序的数组。