2012-04-25 5 views
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;으로 바꿀 수 있습니까? 그렇다면 왜요? 고마워요등급별 배열 정렬

+0

당신은'grade_sort'를 보여 주지만 당신의 코드 호출'name_sort'는 이름이나 등급으로 정렬하려고합니까? – Cfreak

답변

1

return ($x['grade'] < $y['grade']);return $x < $y;으로 변경할 수 있습니까?

$x$y$students은 내부 배열 한 것이다.
예. $xarray('name' => 'Jon', 'grade' => 98.5)$yarray('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는 단순히 두 개의 서로 다른 요소가이 함수를 호출 유지합니다.

+0

나는 아직도 그것을 잘 이해하고있다. $ x array ('name'=> 'Vance', 'grade'=> 85.1)을 받아 들인다. uasort ($ students, 'grade_sort')를 호출하십시오. uasort가 될 것입니다 ($ students, 13.4); uasort가 배열을 어떻게 정렬합니까? 감사합니다. – user1345545

+0

'uasort'가 정렬을 담당합니다. 그렇게하기 위해,'uasort'는 두 개의 인수를 취합니다. 정렬하고자하는 배열과 두 요소를 비교할 수있는 함수입니다. 'uasort'는 그 배열로부터 두 개의 무작위 요소를 취하여 여러분이 제공 한 함수에 전달합니다. 이 함수는 어느 요소가 더 큰지/작은지를 반환합니다. 'uasort'는 그 정보를 취해 두 요소를 정렬합니다. 모든 요소가 정렬 될 때까지이 단계를 반복합니다. – deceze

0

$x 및는 $students 주 배열 내의 개별 배열입니다. 학년별로 정렬하고 싶으므로 grade 키에 액세스해야합니다. 이를 제거하면 어레이를 비교하는 대신 분명히 작동하지 않을 것입니다. 어레이 내부의 실제 값 대신 배열을 비교하기 때문에 당신이 uasort에 전달되는 비교 함수는 모든 비교에 배열 요소를 공급한다

0

, 따라서 return $x < $y 어쨌든 그렇게 많은 감각과 의미를하지 않습니다.

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을 확인할 수 있습니다.