通过在PHP中执行算术运算来更改数组内容的顺序

Changing the order of the array contents by performing arithmetic operations in PHP

本问题已经有最佳答案,请猛点这里访问。

我有以下数组输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    Array
(
    [0] => Array
        (
            [student_id] => 39
            [scored] => 50
            [out_of] => 100
        )

    [1] => Array
        (
            [student_id] => 40
            [scored] => 80
            [out_of] => 100
        )

)

我要计算学生的百分比,并要显示在上面的学生,他们的百分比更高。我该怎么做?我可以更改数组本身的顺序吗?请帮助

我希望数组是这样的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Array
(
    [0] => Array
        (            
            [student_id] => 40
            [scored] => 80
            [out_of] => 100
        )

    [1] => Array
        (
            [student_id] => 39
            [scored] => 50
            [out_of] => 100
        )

)


使用usort

1
2
3
4
5
6
7
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排序算法的列表:http://php.net/manual/en/array.sorting.php

请注意,usort将修改数组本身,因此不要使用$array = usort($array, ...)


如果你的out_of是100,每次意味着你的scored本身就是百分比。

无论如何,您可以使用下面的代码

1
2
3
4
5
6
7
8
9
10
 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上排序是不可行的。

1
2
 usort($new_arr, 'sortByScore');
 echo"[cc lang="php"]"; print_r($new_arr);