PHP 中的 usort 失败,出现重复记录


usort in php failed with duplicate records

我使用以下代码对 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");