3

건물중인 포럼 프로그램에 대한 검색 기능을 만들고 있습니다. 한 시점에서 나는 숫자이며 '점수'를 차원 중 하나로 포함하는 searchResults라는 배열을 가지고 있습니다 (다른 것은 'timeStarted', 'authorUID'및 'TID'입니다)첫 번째가 아닌 차원의 숫자 값으로 다차원 배열 정렬

따라서이 배열은 혼란 스럽습니다. 이 지점과 나는 $ searchResults [1]이 가장 높은 'score'가 될 것이고 [2]는 두 번째로 높을 것이다. php.net에서 array_multisort를 보았지만 어떻게 작동했는지 빠르게 잃어 버렸다. . 그렇다면 정렬 메커니즘으로 '차원 정렬'의 내림 차순으로 내림차순으로 숫자 순으로 $ searchResults를 정렬 (키 재 배열)하는 방법은 무엇입니까? 실제로 코드는 없지만 배열의 모양에 대한 레이아웃이 필요한 경우 여기를 참조하십시오.

$searchResults: 
    [1] - ['timeStarted'] 
     ['authorUID'] 
     ['score'] <- Need to sort first dimension by this value descending 
     ['TID'] 
    etc. 

어떤 도움을 주셔서 감사합니다.

+0

배열 혼란이다. 나는 그것을 좋아한다. –

답변

5

usort 어떤 지정된 비교 함수 이때

$cmp = function($a,$b) {return $b['score'] - $a['score'];}; 
usort($searchResults, $cmp); 

의해 정렬 허용 $ CMP 두 요소 $a 및 [ '점수']의 값에 기초하여 $의 SearchResult $b 비교 함수이다. $ cmp는 동등한 경우 0을, $a['score']이 큰 경우 음수 val, $b['score']이 더 큰 경우 양수 val을 반환합니다. 일반적으로 다른 방법이지만 내림차순 정렬이 필요합니다.

+0

고마워, 나는 그것에게 소용돌이를 줄 것이다. 나는 usort가 이런 일을 할 수 있다는 것을 알았지 만, 내부적으로 어떻게 작동하는지에 대한 문서가 부족하고, 배열을 통해 정렬 방식을 알 수는 없었다. 사용자 정의 함수를 작성할 때 내부적으로 발생하는 문제를 반복하는 방법을 알지 못했다. 그것을 위해. 감사! – Adam

+0

당신은 overthinking되었을 수도 있습니다 - 나는 개인적으로 정렬 알고리즘이 뭔지 모르겠다. 평등의 경우에, 나는 순서가 보존되는지 안다 (안정 대 불안정한 정렬). 하지만 나는 그 사실을 알 필요가 없다. 추상화의 요점 - 나는 내가 확신하고 그 종류가 적절하게 작동하는 비교 함수를 제공한다. 그것이 당신을 위해 일하기를 바랍니다. –

0

원하는 기능은 usort입니다. 예 # 2에서 보면 :

<?php 
function cmp($a, $b) 
{ 
    return strcmp($a["fruit"], $b["fruit"]); 
} 

$fruits[0]["fruit"] = "lemons"; 
$fruits[1]["fruit"] = "apples"; 
$fruits[2]["fruit"] = "grapes"; 

usort($fruits, "cmp"); 

while (list($key, $value) = each($fruits)) { 
    echo "\$fruits[$key]: " . $value["fruit"] . "\n"; 
} 
?> 

출력 :

$fruits[0]: apples 
$fruits[1]: grapes 
$fruits[2]: lemons