2010-05-20 3 views
0

그래서 나는 큰 데이터 배열을 가지므로 두 가지 기준으로 정렬해야합니다.php usort로 두 번째 정렬

변수 $data['important']$data['basic']이 있습니다.

그들은 단순한 숫자이며, 나는 먼저 uSort를 사용하여 $data을 중요하게 그리고 기본으로 정렬하려고합니다.

그래서

Important | Basic 
10  | 8 
9   | 9 
9   | 7 
7   | 9 

에 usort 기능은 어떻게 두 번째 변수에 배열을 정렬하십시오 다시하고 중요 순서를 유지할 수있는 간단한

public function sort_by_important($a, $b) { 

     if ($a[important] > $b[important]) { 
      return -1; 
     } 
     elseif ($b[important] > $a[important]) { 
      return 1; 
     } 
     else { 
      return 0; 
     } 
    } 

입니까?

모두에게 감사드립니다.

편집

어떻게 후에도 세 번째 정렬 옵션을 추가하는 방법에 대한? 이하> 그래서 중요> 기본

답변

3

당신은 정말 array_multisort()을 사용해야

// Obtain a list of columns 
foreach ($data as $key => $row) { 
    $important[$key] = $row['important']; 
    $basic[$key] = $row['basic']; 
} 

array_multisort($important, SORT_NUMERIC, SORT_DESC, 
       $basic, SORT_NUMERIC, SORT_DESC, 
       $data); 

그러나 당신이 사용해야하는 경우 usort() :

public function sort_by_important($a, $b) { 

    if ($a[important] > $b[important]) { 
     return -1; 
    } elseif ($b[important] > $a[important]) { 
     return 1; 
    } else { 
     if ($a[basic] > $b[basic]) { 
      return -1; 
     } elseif ($b[basic] > $a[basic]) { 
      return 1; 
     } else { 
      return 0; 
     } 
    } 
} 
1

왜 간단하게는 array_multisort 사용하지()

public function sort_by_important($a, $b) { 
    if ($a['Important'] > $b['Important']) { 
     return -1; 
    } elseif ($b['Important'] > $a['Important']) { 
     return 1; 
    } else { 
     if ($a['Basic'] > $b['Basic']) { 
      return -1; 
     } elseif ($b['Basic'] > $a['Basic']) { 
      return 1; 
     } else { 
      return 0; 
     } 
    } 
} 
+0

array_multisort가 올바른 답이었습니다. 필자는 kenny에게 포인트를 주어야했습니다. 왜냐하면 그는 ans를주었습니다. 그 자리에서, 주문을 별도의 변수에 배치하는 것이 나를 혼란스럽게 만들었다. 당신의 도움을 주셔서 감사합니다! – bluedaniel