我有一个数组$scores
,如下所示。
我要执行的操作是基于数字值以降序对数组进行排序。我尝试过定义建议的here之类的函数以及其他方法,但是还没有做到。非常感谢您的帮助或指导。
-------------------------------------------------- - - - - - - -更新 - - - - - - - - - - - - - - - - - - ------------------------
array ( 0 => array ( 0 => 'B.Howell', 1 => 16.8, ), 1 => array ( 0 => 'B.Osweiler', 1 => 14.88, ), 2 => array ( 0 => 'K.Ballage', 1 => 13.7, ), 3 => array ( 0 => 'F.Owusu', 1 => 8.8, ), 4 => array ( 0 => 'I.Ford', 1 => 6.3, ), 5 => array ( 0 => 'B.Radcliff', 1 => 6.4, ), 6 => array ( 0 => 'D.Fales', 1 => 3.96, ), 7 => array ( 0 => 'L.Carroo', 1 => 4.9, ), 8 => array ( 0 => 'R.Scott', 1 => 2.5, ), 9 => array ( 0 => 'M.Lewis', 1 => 2.4, ), 10 => array ( 0 => 'T.Duarte', 1 => 3.2, ), 11 => array ( 0 => 'J.Langford', 1 => 2.8, ), 12 => array ( 0 => 'A.Derby', 1 => 1.1, ), 13 => array ( 0 => 'D.Morgan', 1 => 1.2, ), )
我以前尝试过使用usort
提供的解决方案,但仍然无法使它们起作用。它确实倾向于以降序对数组进行排序,但是,仍然存在离群值,请参见以下图像前后。
function mySort($a, $b) {
return $b[1] - $a[1];
}
usort($scores, 'mySort');
答案 0 :(得分:1)
它可以按预期与usort()一起使用,以下降数字值
$b['1'] - $a['1']
对数字值进行排序降序顺序
$a['1'] - $b['1']
对数字值进行排序升序顺序
<?php
$array = array ( array ('B.Osweiler',14.88 ),
array ('D.Fales', 3.96),
array ('B.Radcliff', 6.4 ),
array ('K.Ballage', 13.7 ),
array ('J.Langford', 2.8 ),
array ('B.Howell', 16.8 ) );
print "Before Sort". PHP_EOL;;
print_r($array);
usort($array, function($a, $b) {
return $b['1'] - $a['1']; //see this line carefully
});
print "After Sort". PHP_EOL;
print_r($array);
?>
编辑:我已根据问题的新修改添加了修改,该修改将解决您现有的异常值。
<?php
$array = array ( 0 => array ( 0 => 'B.Howell', 1 => 16.8, ), 1 => array ( 0 => 'B.Osweiler', 1 => 14.88, ), 2 => array ( 0 => 'K.Ballage', 1 => 13.7, ), 3 => array ( 0 => 'F.Owusu', 1 => 8.8, ), 4 => array ( 0 => 'I.Ford', 1 => 6.3, ), 5 => array ( 0 => 'B.Radcliff', 1 => 6.4, ), 6 => array ( 0 => 'D.Fales', 1 => 3.96, ), 7 => array ( 0 => 'L.Carroo', 1 => 4.9, ), 8 => array ( 0 => 'R.Scott', 1 => 2.5, ), 9 => array ( 0 => 'M.Lewis', 1 => 2.4, ), 10 => array ( 0 => 'T.Duarte', 1 => 3.2, ), 11 => array ( 0 => 'J.Langford', 1 => 2.8, ), 12 => array ( 0 => 'A.Derby', 1 => 1.1, ), 13 => array ( 0 => 'D.Morgan', 1 => 1.2, ), );
print '<pre>';
print "Before Sort". PHP_EOL;;
print_r($array);
usort($array, function($a, $b) {
if($a[1]==$b[1]){
return 0;
}
return ($a[1] > $b[1]) ? -1 : 1;
});
print "After Sort". PHP_EOL;
print_r($array);
?>
答案 1 :(得分:0)
您应该可以像这样使用usort()
$arr = [ ['B.Osweiler', 14.88],
['D.Fales', 3.96 ],
['B.Radcliff', 6.4 ],
['K.Ballage', 13.7 ],
['J.Langford', 2.8 ],
['B.Howell', 16.8 ]
];
function mySort($a, $b) {
return $a[1] - $b[1];
}
usort($arr, 'mySort');
print_r($arr);
结果
Array
(
[0] => Array
(
[0] => J.Langford
[1] => 2.8
)
[1] => Array
(
[0] => D.Fales
[1] => 3.96
)
[2] => Array
(
[0] => B.Radcliff
[1] => 6.4
)
[3] => Array
(
[0] => K.Ballage
[1] => 13.7
)
[4] => Array
(
[0] => B.Osweiler
[1] => 14.88
)
[5] => Array
(
[0] => B.Howell
[1] => 16.8
)
)