2014-04-18 1 views
0

첫 번째 열이 page_id이고 두 번째 열이 points 인 2D 배열이 있습니다. page_id은 데이터베이스의 페이지 URL에 해당하는 int 값이고 해당 페이지에 할당 된 포인트를 나타내는 points입니다.PHP로 2D 배열 정렬하기 | 내림차순으로

가장 높은 점수를 가진 페이지가 먼저 표시되고 그 반대의 방식으로 페이지를 표시하려고합니다.

arr[0][0] => 2 

arr[0][1] => 200 

arr[1][0] => 3 

arr[1][1] => 29 

arr[2][0] => 4 

arr[2][1] => 400 


---------------------- 
page_id |  points 
____________________ 
2   | 200 

3   | 29 

4   | 400 

---------------------------------- 

---------------------- 
page_id |  points 
____________________ 
4   | 400 

2   | 200 

3   | 29 

---------------------------------- 
+3

시도한 내용은 무엇입니까? – Nambi

+0

저는 PHP 태그에는 일반 적이 아니고 PHP 사용자가 아니지만 반드시 PHP에 정렬 알고리즘 구현이 있습니다. – Jules

+0

어떻게 그 이상한 방식으로 데이터가있는 배열을 얻고 있습니까? 더 효율적인 방법으로 문제를 표시하기 전에 문제를 해결할 수 있습니다. – Toote

답변

0

로 분류 할 필요가있는 경우

그래서 예 나는 PHP asort() (http://php.net/asort)를 사용하는 것이 내 자신의 정렬 기능을 작성합니다.

예 : 여기

function aasort (&$array, $key) { 
    $sorter=array(); 
    $ret=array(); 
    reset($array); 
    foreach ($array as $ii => $va) { 
     $sorter[$ii]=$va[$key]; 
    } 
    asort($sorter); 
    foreach ($sorter as $ii => $va) { 
     $ret[$ii]=$array[$ii]; 
    } 
    $array=$ret; 
} 

aasort($your_array,"order"); 

참조 소스 : https://stackoverflow.com/a/2699110/2335675

은 $ 키 또는 "순서"정렬 기준으로 원하는 키이므로주의 해주십시오. 따라서 [x] [1] 단위로 정렬하려면 키를 1으로 설정해야합니다.

0
$pageId = 0; 
$points = 0; 
for($i=0;$i<count($arr);$i++){ 
for($j = $i+1;$j< count($arr);$j++){ 
    if($arr[$i][1] < $arr[$j][1]){ 
     $pageId = $arr[$i][0]; 
     $points = $arr[$i][1]; 
     $arr[$i][0] = $arr[$j][0]; 
     $arr[$i][1] = $arr[$j][1]; 
     $arr[$j][0] = $pageId; 
     $arr[$j][1] = $points; 
    } 
} 
} 

시도해보십시오 ... 도움이 될 것입니다.