PHP数组 - 订购

问题描述 投票:0回答:2

我有一个数组$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');

AFTER IMAGE

php arrays
2个回答
1
投票

它正如预期的那样与usort()一起用于DESCENDING数值的顺序

$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);
?>

但是:ぁzxswい

编辑:我已根据将修复现有异常值的问题的新修改添加了编辑。

https://3v4l.org/bWdIq

但是:ぁzxswい


0
投票

你应该能够像这样使用<?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); ?>

https://3v4l.org/c4UmQ

结果

usort()
© www.soinside.com 2019 - 2024. All rights reserved.