使用十进制数来解决问题

Yam*_*ami 10 php arrays sorting

我目前正在尝试通过其子值对多维数组进行排序.该数组的结构是:

[0] => Array
    (
        [id] => 87
        [sold] => 50
        [stock] => 991
        [speed] => 1.5
        [days_left] => 660.66666666667
    )

[1] => Array
    (
        [id] => 97
        [sold] => 20
        [stock] => 120
        [speed] => 1.2
        [days_left] => 100
    )

[2] => Array
    (
        [id] => 36
        [sold] => 2
        [stock] => 1020
        [speed] => 1.02
        [days_left] => 1000
    )
Run Code Online (Sandbox Code Playgroud)

我正在使用的代码是:

usort($data, function($a, $b) { return $a[$_GET['sortby']] - $b[$_GET['sortby']]; });
Run Code Online (Sandbox Code Playgroud)

其中$ _GET ['sortby']变量等于键.

到目前为止一切都很好,everthing工作,它正确地排序所有值除了速度!首先,我认为它与十进制数有关,但days_left也包含小数,并且排序正确..:/

正确的输出(days_left):

[0] => Array
    (
        [id] => 97
        [sold] => 20
        [stock] => 120
        [speed] => 1.2
        [days_left] => 100
    )

[1] => Array
    (
        [id] => 87
        [sold] => 50
        [stock] => 991
        [speed] => 1.5
        [days_left] => 660.66666666667
    )

[2] => Array
    (
        [id] => 36
        [sold] => 2
        [stock] => 1020
        [speed] => 1.02
        [days_left] => 1000
    )
Run Code Online (Sandbox Code Playgroud)

输出错误(速度):

[0] => Array
    (
        [id] => 97
        [sold] => 20
        [stock] => 120
        [speed] => 1.2
        [days_left] => 100
    )

[1] => Array
    (
        [id] => 87
        [sold] => 50
        [stock] => 991
        [speed] => 1.5
        [days_left] => 660.66666666667
    )

[2] => Array
    (
        [id] => 36
        [sold] => 2
        [stock] => 1020
        [speed] => 1.02
        [days_left] => 1000
    )
Run Code Online (Sandbox Code Playgroud)

希望有人能帮助我!

Eug*_*ene 37

请参阅usort文档.浮点结果将转换为整数.要正确工作,请使用以下代码:

usort(
    $data, 
    function($a, $b) {
        $result = 0;
        if ($a[$_GET['sortby']] > $b[$_GET['sortby']]) {
            $result = 1;
        } else if ($a[$_GET['sortby']] < $b[$_GET['sortby']]) {
            $result = -1;
        }
        return $result; 
    }
);
Run Code Online (Sandbox Code Playgroud)