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は、内の配列の1つになります$students
たとえば、で$xある可能性がarray('name' => 'Jon', 'grade' => 98.5)
あり$yますarray('name' => 'Vance', 'grade' => 85.1)
だからreturn $x < $y意味がありません。

しかし、そのコードはあまり良くありません。比較関数grade_sortは一度に2つの要素を取り、両方の要素が等しいと見なされた場合は戻り0、最初の要素が低い場合は負の数、2番目の要素が低い場合は正の数を返します。あなたのリターンtrueまたはfalse。正しいコードは次のとおりです。

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

uasortどの要素がどちらよりも大きいかがわかり、それらすべてをソートしたことが満たされるまで、2つの異なる要素を使用してこの関数を呼び出し続けるだけです。

于 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 に答える