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');

我是php的新手,我不能很好地理解上面的代码。如果不是,我可以将其更改 return ($x['grade'] < $y['grade']);return $x < $y; ,为什么?谢谢你

4

4 回答 4

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简单地用两个不同的元素调用这个函数,直到它知道哪个元素大于哪个元素并且已经对它们进行了排序。

于 2012-04-25T02:50:47.623 回答
0

$x并且$y是主数组中的单个$students数组。由于您想按他们的成绩排序,因此您需要访问grade密钥。删除它会告诉它比较数组,这显然是行不通的。

于 2012-04-25T02:48:23.093 回答
0

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

于 2012-04-25T02:49:21.007 回答
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以获得更好的理解。

于 2012-04-25T03:36:39.153 回答