php usort 对象返回意外顺序
php usort objects is returning unexpected order
以下应按单圈时间升序对车手数组进行排序:
function sortDrivers($a, $b)
{
if (floatval($a->fastestLap) === floatval($b->fastestLap)) {
return 0;
}
return floatval($a->fastestLap) < floatval($b->fastestLap) ? -1 : 1;
}
Log::info("Before:");
foreach($drivers as &$driver){
Log::info($driver->driverCode . " - " . floatval($driver->fastestLap));
}
usort($drivers, "sortDrivers");
$position = 0;
foreach($drivers as &$driver){
$driver->position = ++$position;
$driver->save();
}
Log::info("After:");
foreach($drivers as &$driver){
Log::info($driver->driverCode . " - " . floatval($driver->fastestLap) . " - " . $driver->position);
}
实际的输出类似于:
Before:
Mark - 112.2
Roger - 108.77
Pete - 110.038
Gary - 109.49
Sid - 111.742
Rod - 87.082
Bob - 110.404
Eric - 112.482
Will - 113.478
Nigel - 0
Harry - 110.01
Paul - 112.887
Victor - 109.182
Matt - 109.987
Clive - 109.975
Sol - 109.23
Olly - 0
Ben - 0
Craig - 114.241
Andy - 96.399
Adam - 93.177
Kel - 110.766
After:
Rod - 87.082 - 1
Adam - 93.177 - 2
Paul - 112.887 - 3
Roger - 108.77 - 4
Bob - 110.404 - 5
Mark - 112.2 - 6
Will - 113.478 - 7
Gary - 109.49 - 8
Pete - 110.038 - 9
Harry - 110.01 - 10
Matt - 109.987 - 11
Craig - 114.241 - 12
Eric - 112.482 - 13
Sid - 111.742 - 14
Kel - 110.766 - 15
Clive - 109.975 - 16
Sol - 109.23 - 17
Victor - 109.182 - 18
Andy - 96.399 - 19
Olly - 0 - 20
Nigel - 0 - 21
Ben - 0 - 22
虽然单圈时间明显有增加的趋势,但一些车手的位置是错误的。
为什么?
抱歉。我使用了错误的排序功能,而不是上面发布的功能。
以下应按单圈时间升序对车手数组进行排序:
function sortDrivers($a, $b)
{
if (floatval($a->fastestLap) === floatval($b->fastestLap)) {
return 0;
}
return floatval($a->fastestLap) < floatval($b->fastestLap) ? -1 : 1;
}
Log::info("Before:");
foreach($drivers as &$driver){
Log::info($driver->driverCode . " - " . floatval($driver->fastestLap));
}
usort($drivers, "sortDrivers");
$position = 0;
foreach($drivers as &$driver){
$driver->position = ++$position;
$driver->save();
}
Log::info("After:");
foreach($drivers as &$driver){
Log::info($driver->driverCode . " - " . floatval($driver->fastestLap) . " - " . $driver->position);
}
实际的输出类似于:
Before:
Mark - 112.2
Roger - 108.77
Pete - 110.038
Gary - 109.49
Sid - 111.742
Rod - 87.082
Bob - 110.404
Eric - 112.482
Will - 113.478
Nigel - 0
Harry - 110.01
Paul - 112.887
Victor - 109.182
Matt - 109.987
Clive - 109.975
Sol - 109.23
Olly - 0
Ben - 0
Craig - 114.241
Andy - 96.399
Adam - 93.177
Kel - 110.766
After:
Rod - 87.082 - 1
Adam - 93.177 - 2
Paul - 112.887 - 3
Roger - 108.77 - 4
Bob - 110.404 - 5
Mark - 112.2 - 6
Will - 113.478 - 7
Gary - 109.49 - 8
Pete - 110.038 - 9
Harry - 110.01 - 10
Matt - 109.987 - 11
Craig - 114.241 - 12
Eric - 112.482 - 13
Sid - 111.742 - 14
Kel - 110.766 - 15
Clive - 109.975 - 16
Sol - 109.23 - 17
Victor - 109.182 - 18
Andy - 96.399 - 19
Olly - 0 - 20
Nigel - 0 - 21
Ben - 0 - 22
虽然单圈时间明显有增加的趋势,但一些车手的位置是错误的。
为什么?
抱歉。我使用了错误的排序功能,而不是上面发布的功能。