2015-01-30 2 views
0

isVerified을 반환 한 경우 배열을 정렬하는 작은 PHP 함수에서 작업하고 있습니다. 사실 그것이 확인되면 그 결과를 목록 상단에 표시하고 싶습니다. 필자는 내가 PHP에 익숙하지 않다는 것을 인정하고 이것을 쉽게 만드는 방법이있을 수 있다고 생각했기 때문에 많은 독서를 해왔다. Uasort()가 필자의 정렬 능력에 필요한 것과 인덱스 연관성을 유지하는 것처럼 보이지만, 올바르게 사용하는 방법으로 약간 혼란 스럽다. 나는이 같은 외모 작업입니다 PHP의 원래 블록 : 여기에서배열을 uasort로 정렬

<?php 
    if (count($results)): 

    $lexisIndex = 1; 

    foreach ($results as $person){ 
    $person->isVerified = (substr($person->first_name, 0, 1) == substr($fname, 0, 1) && $person->last_name == $lname);          
    $person->lexisIndex = $lexisIndex++; 
    } 

    foreach ($results as $person): 
?> 

나는 배열에 $results를 넣고 uasort 기능으로 통과시켰다.

<?php 
    if (count($results)): 

     $lexisIndex = 1; 

     foreach ($results as $person){ 
      $person->isVerified = (substr($person->first_name, 0, 1) == substr($fname, 0, 1) && $person->last_name == $lname); 
      $person->lexisIndex = $lexisIndex++; 
     } 

     $array = array($results); 

     uasort($array, function($a, $b) { 
     if ($a == $b) { 
      return 0; 
     } 
     return ($a < $b ? -1 : 1); 
    }); 

    foreach ($results as $person): 
?> 

이 여전히 나를 위해 작동하지 않았고, 나는이 일을하려고 시간의 지옥을 보내고있어 그래서 오류가 발생하지 않았다 : 나는 내가 필요로 무엇을 생각 추가 한 후 코드는 다음처럼 보였다 한 명. 내가 옳은 길을 가고 있는지 알고 싶습니다. 아니면보다 효율적인 방법으로이 작업을 수행 할 수 있습니까? 이전에 묻는 질문처럼 들리지만, 검색하는 동안 해결 방법을 찾지 못해서 사과드립니다. 이것이 중복 된 것이라면 링크를 클릭하고 더 많은 독서를 할 수있어서 기쁩니다. 시간과 도움에 감사드립니다.

답변

1

$a$b은 배열의 요소입니다. 따라서 귀하의 경우에, 그것들은 사람의 물건이며, 그것들을 비교하는 방법입니다 :

uasort($array, function($a, $b) { 
    // isVerified is most important. Move to top. 
    if ($a->isVerified != $b->isVerified) { 
     return ($a->verified ? -1 : 1); 
    } 
    // If neither or both are verified, compare based on lexisindex. 
    return $a->lexisIndex - $b->lexisIndex; 
}); 

마지막 줄은 바로 가기입니다. 비교 함수는 -1, 0 또는 1을 반환 할 필요가 없습니다. 단지 < 0을 받아들이면 이 $b보다 작고 동등한 경우 0, larger 인 경우 0보다 작음을 나타냅니다. 따라서 숫자 값을 비교하는 현재 비교 콜백은 return $a - $b;으로 작성 될 수 있습니다. 이렇게 마지막 줄을 쓸 수도 있지만 필요하지는 않습니다.

return ($a->lexisIndex < $b->lexisIndex ? -1 : 1); 
+1

아! 그 코드와 그 뒤에 무슨 일이 벌어지고 있는지에 대한 설명을 해주셔서 너무 감사드립니다. 완벽하게 작동했습니다. –