之前的对象:
0 =>
object(stdClass)[130]
public 'id' => int 17
public 'account_id' => int 18
public 'rank' => int 1
public 'skill' => string '0.0000' (length=6)
1 =>
object(stdClass)[131]
public 'id' => int 33
public 'account_id' => int 19
public 'levels' => int 0
public 'rank' => int 3
public 'skill' => string '0.0000' (length=6)
2 =>
object(stdClass)[132]
public 'id' => int 23
public 'account_id' => int 24
public 'rank' => int 2
public 'skill' => string '0.0000' (length=6)
3 =>
object(stdClass)[133]
public 'id' => int 23
public 'account_id' => int 24
public 'rank' => int 11
public 'skill' => string '0.0000' (length=6)
我正在使用以下功能
usort($results, function($a, $b)
{
return strcmp($a->rank, $b->rank);
});
取而代之的$ results会像这样排序:1,2,3,11。 对象的排序方式如下:1,11,2,3
答案 0 :(得分:0)
那是因为strcmp
用于 STRINGS 。这意味着字符串比较规则适用,11 < 3
为TRUE
,因为字符串是逐字符比较的。
e.g。
1234
==<*
124
通过整数规则,int(124)小于int(1234),但是比字符串(1234)更大,因为3
小于4
。
尝试
return $a->rank - $b->rank;
用于比较功能。
php > var_dump(strcmp('123', '1234'));
int(-1) <--"less than"
php > var_dump(strcmp('124', '1234'));
int(1) <-- "greater than"
php > var_dump(strcmp(123, 1234));
int(-1)
php > var_dump(strcmp(124, 1234));
int(1)
答案 1 :(得分:0)
usort($results, function($a, $b)
{
if ($a->rank == $b->rank) {
return 0;
}
return ($a->rank < $b->rank) ? -1 : 1;
});