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)