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

时间:2018-04-27 12:17:32

标签: php arrays sorting

我有以下数组输出。

    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
        )

)

2 个答案:

答案 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);