我定义了一个对象,可是我在在对象中使用uasort进行排序的时候,
void uksort(array array, function cmp_function);
中的cmp_function应该怎么填?
不用对象时用函数名就可以了,可是在对象中我用函数名newsort或者
$this->newsort也不行,把newsort定义函数放到对象外或者对象内都不能搞定,
假如我用$this->newsoft(),提示说参数不够,我加上了几个参数,还是可以调用这个函数的,可是我不知道用该填什么参数才可以。
另外uasort的函数使用例子有谁有啊!
---------------------------------------------------------------
这是PHP手册上的例子,是用uksort做示范的,主要是让大家知道这个cmp_function怎么写:
function cmp ($a, $b) {
if ($a == $b) return 0;
return ($a > $b) ? -1 : 1;
}
$a = array (4 => "four", 3 => "three", 20 => "twenty", 10 => "ten");
uksort ($a, "cmp");
while (list ($key, $value) = each ($a)) {
echo "$key: $value\n";
}
---------------------------------------------------------------
把newsort()函数放到class 的外面。
---------------------------------------------------------------
Exp.
$ret[1]["teamid"] = 145;
$ret[1]["score"] = 7; // 积分
$ret[1]["m"] = 5; // 赛
$ret[1]["w"] = 2; // 胜
$ret[1]["d"] = 1; // 平
$ret[1]["l"] = 2; // 负
$ret[1]["i"] = 8; // 进球
$ret[1]["o"] = 2; // 失球
... ...
$ret[$i]["teamid"] = 234;
$ret[$i]["score"] = 2;
uasort($ret, 'scoreListCompare');
// 积分排名规则。
function scoreListCompare($ar1, $ar2)
{
// 先看积分
if ($ar1['score']>$ar2['score'])
return -1;
else if ($ar1['score']<$ar2['score'])
return 1;
// 再看净胜球
if (($ar1['i'] - $ar1['o']) > ($ar2['i'] - $ar2['o']))
return -1;
else if (($ar1['i'] - $ar1['o']) < ($ar2['i'] - $ar2['o']))
return 1;
// 再看进球数
if ($ar1['i'] > $ar2['i'])
return -1;
else if ($ar1['i'] < $ar2['i'])
return 1;
return 0;
}
---------------------------------------------------------------
刚才测试了一下,qsnake说的是很对的.只有把cmp函数放到class外才会被正常调用.
对于楼主的情况,不妨自己写一个排序函数,因为你还要考虑很多其它的因素,自己写一定比较合适.