我有以下数组输出。
Array
(
[0] => Array
(
[student_id] => 39
[scored] => 50
[out_of] => 100
)
[1] => Array
(
[student_id] => 40
[scored] => 80
[out_of] => 100
)
)
我想计算学生的百分比,并希望向学生展示其百分比更高的学生。我该怎么做?我可以更改数组本身的顺序吗?请帮忙
我希望数组像这样
Array
(
[0] => Array
(
[student_id] => 40
[scored] => 80
[out_of] => 100
)
[1] => Array
(
[student_id] => 39
[scored] => 50
[out_of] => 100
)
)
答案 0 :(得分:1)
使用usort
usort($array, function($a, $b) {
// This code will be executed each time two elements will be compared
// If it returns a positive value, $b is greater then $a
// If it returns 0, both are equal
// If negative, $a is greater then $b
return ($a['scored'] / $a['out_of']) <=> ($b['scored'] / $b['out_of']);
});
有关此功能的更多详细信息:http://php.net/manual/en/function.usort.php
所有php排序algs的列表:http://php.net/manual/en/array.sorting.php
请注意,usort将修改数组本身,因此DONT使用$array = usort($array, ...)
答案 1 :(得分:0)
如果您的out_of
每次为100,则表示您的scored
本身就是百分比
无论如何你可以使用下面的代码
function sortByScore($x, $y) {
return $y['per'] - $x['per'];
}
$new_arr = array();
foreach ($arr as $key => $value) {
$per = ($value['scored'] / $value['out_of'] ) * 100;
$value['per'] = $per;
$new_arr[] = $value;
}
首先计算百分比,然后按百分比排序
如果scored
每次不同,out_of
会更多,因此scored
上的排序不可行
usort($new_arr, 'sortByScore');
echo "<pre>"; print_r($new_arr);