按等级对数组进行排序

时间:2012-04-25 02:44:57

标签: php arrays

    $students = array (
     256 => array ('name' => 'Jon', 'grade' => 98.5),
     2 => array ('name' => 'Vance', 'grade' => 85.1),
     9 => array ('name' => 'Stephen', 'grade' => 94.0),
     364 => array ('name' => 'Steve', 'grade' => 85.1),
     68 => array ('name' => 'Rob', 'grade' => 74.6)
     );

 function grade_sort($x,$y){
  return ($x['grade'] < $y['grade']);
  }
uasort ($students, 'grade_sort');

我是php的新学习者,我无法理解上面的代码。如果没有,我可以将此return ($x['grade'] < $y['grade']);更改为return $x < $y;,为什么?谢谢

4 个答案:

答案 0 :(得分:1)

  

我可以将此return ($x['grade'] < $y['grade']);更改为return $x < $y;吗?

没有。 $x$y将成为$students中的一个数组 例如。 $x可能是array('name' => 'Jon', 'grade' => 98.5) $y可能是array('name' => 'Vance', 'grade' => 85.1) 所以return $x < $y没有意义。

但是这段代码并不是很好。比较函数grade_sort一次取两个元素,如果两个元素被认为是相等则应返回0,如果第一个元素被认为是相等则返回负数,如果第二个更低则返回正数。您的返回truefalse。正确的代码是:

function grade_sort($x, $y){
    return $y['grade'] - $x['grade'];
}
uasort($students, 'grade_sort');

uasort只是一直用两个不同的元素调用这个函数,直到它满足它知道哪个元素大于哪个元素并对它们进行了全部排序。

答案 1 :(得分:0)

$x$y是主$students数组中的各个数组。由于您希望按其成绩进行排序,因此您需要访问grade密钥。删除它会告诉它比较数组,这显然不起作用。

答案 2 :(得分:0)

您传递给uasort的比较函数将在每次比较时被赋予数组元素,因此return $x < $y无论如何都不会那么有意义和无意义,因为您正在比较数组而不是数组内的实际值

答案 3 :(得分:0)

首先,我想纠正您的代码。

$students = array (
 256 => array ('name' => 'Jon', 'grade' => 98.5),
 2 => array ('name' => 'Vance', 'grade' => 85.1),
 9 => array ('name' => 'Stephen', 'grade' => 94.0),
 364 => array ('name' => 'Steve', 'grade' => 85.1),
 68 => array ('name' => 'Rob', 'grade' => 74.6)
 );  

 function grade_sort($x,$y){
    return ($x['grade'] < $y['grade']);
 }
 uasort ($students,'grade_sort');
 print_r($students);

现在回到你的答案。您不能使用return $x < $y,因为$ x和$ y是一个数组,您希望比较定义的函数“grade_sort”中的学生成绩。您可以查看http://php.net/manual/en/function.uasort.php以便更好地理解。