2012-08-26 123 views
0

我有一個數組,我只是試圖通過一個score鍵來排序,該鍵包含我試圖排序的值。所需結果將改變下面陣列的順序以按以下順序顯示索引:[0][2],[1]PHP數組按數據庫排序結果排序

我正在循環從數據庫中提取的結果。我創建了一個名爲score的密鑰,然後將$row2陣列推入一個單獨的陣列,因爲如果我使用mysql_data_seek,它將刪除score密鑰。

另外它在底部創建一個不需要的密鑰score

我該如何最好地清理這個問題,並確保結果從高到低排序?

$my_array = array(); 

while ($row2 = mysql_fetch_assoc($result2)) 
{ 
//score determined here 
//$row2['score'] = ...more math, variable is numeric, not a string 
array_push($array_page,$row2); 
} 

當前不想要的結果...

Array 
(
    [0] => Array 
     (
      [score] => 7 
     ) 
    [1] => Array 
     (
      [score] => 2 
     ) 
    [2] => Array 
     (
      [score] => 4 
     ) 
    [score] => 
) 

期望的結果......在PHP> 5.3,你可以使用內聯functoins

Array 
(
    [0] => Array 
     (
      [score] => 7 
     ) 
    [2] => Array 
     (
      [score] => 4 
     ) 
    [1] => Array 
     (
      [score] => 2 
     ) 
) 
+1

在查詢中使用「按分數排序」。 – jordanm

+0

我沒有在SQL查詢中處理分數。 > __> – John

+0

...但是您使用SQL查詢獲得分數,對吧?讓數據庫爲你做所有的工作。 – EthanB

回答

1
function scoreSort($a, $b){ 
    if($a['score'] == $b['score']) return 0; 
    return $a['score'] > $b['score'] ? -1 : 1; 
} 
usort(&$myArray, 'scoreSort'); 

usort(&$myArray, function($a,$b){ /* ... */ }); 
+0

在排序時維護KEYS,請使用「uksort」 – TheHe

+0

這看起來幾乎足夠讓我接受,只是它以相反的方式排序,最底層的分數最高,而不是我需要的頂端。我可以倒轉陣列,但是我可以使用的函數有一個更簡單的修改嗎?我嘗試了將minus運算符更改爲加號的更明顯的部分,儘管這沒有奏效。 – John

+0

已更改;) 只是替換「<" with ">」:D – TheHe