usort问题与小数 [英] usort issue with decimal numbers
问题描述
目前,我正在试图理清其子值多维数组。
阵列的结构是:
I'm currently trying to sort a multidimensional array by its subvalues. The structure of the array is:
[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
)
在code,我使用的是:
The code I'm using is:
usort($data, function($a, $b) { return $a[$_GET['sortby']] - $b[$_GET['sortby']]; });
当$ _GET ['sortby']变量等于关键。
where the $_GET['sortby'] variable equals the key.
到目前为止好,全部的寄托都在工作,它正确排序的所有值除了速度!
首先,我认为这事做的十进制数,但DAYS_LEFT还包括小数和排序正确..:/
So far so good, everthing is working, it sorts all values correctly EXCEPT the speed! First, I thought it has something to do with the decimal numbers, but the days_left include also decimals and are sorted correctly.. :/
正确的输出(DAYS_LEFT):
Correct output (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
)
错误输出(速度):
Wrong output (speed):
[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
)
希望有人能帮助我!
Hope anybody can help me!
推荐答案
请参阅usort文档。 float结果将被转换为整数。为了获得正确的工作中使用这个code:
See usort docs. Float result will be converted to integer. For correct work use this code:
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;
}
);
这篇关于usort问题与小数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!