我使用以下代码对 3-D 数组进行排序(降序(:
function cmp($a, $b) {
return $b["user_points"] - $a["user_points"];
}
usort($myArray, "cmp");
但是排序后的数组看起来像这样:
user_id user_name user_points
CTEST111 TST111 175.00
CTEST100 TST100 110.00
CTEST801 TST801 100.00
CTEST401 TST401 100.00
CTEST901 TST901 63.33
CTEST501 TST501 63.33
CTEST102 TST02 64.25
CTEST104 TST04 55.00
CTEST101 TST01 52.82
CTEST202 TST202 42.65
CTEST201 TST201 42.60
CTEST302 TST302 42.11
第 5、6、7 行未正确排序。如何解决这个问题?
问题是cmp
函数的返回类型。您返回的是浮点值而不是整数。
如果你查看 usort 的 PHP 手册,有一个警告:
谨慎从比较函数返回非整数值(如浮点数(将导致回调返回值的内部强制转换为整数。因此,诸如 0.99 和 0.1 之类的值都将转换为整数值 0,这将比较此类值为相等。
这段代码应该可以完成工作
function cmp($a, $b) {
if ($a["user_points"] == $b["user_points"])
{
return 0;
}
return ($a["user_points"] > $b["user_points"]) ? -1 : 1;
}
usort($myArray, "cmp");