$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;
,为什么?谢谢
答案 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
,如果第一个元素被认为是相等则返回负数,如果第二个更低则返回正数。您的返回true
或false
。正确的代码是:
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以便更好地理解。