2

我有一個PHP數組,看起來像這樣:http://pastie.org/1346063(見陣列例如pastie)安排一個多維數組

我想要做的是重新排序該數組到由每個分揀另一個數組數組的[votes] [POINTS]子數組數值降序。具有最高[投票] [POINTS]值的數組將首先在主數組中列出。

回答

3

使用usort()功能我們可以創建自己的比較功能:

function cmp($a, $b) { 
    if($a['votes']['POINTS'] == $b['votes']['POINTS']) { 
     return 0; 
    } 
    return ($a['votes']['POINTS'] < $b['votes']['POINTS']) ? 1 : -1; 
} 

usort($array, 'cmp'); 

結果:

使用測試數據相似的結構你:

Array 
(
    [0] => Array 
     (
      [votes] => Array 
       (
        [UP] => 1 
        [DOWN] => 0 
        [POINTS] => 5 
       ) 

     ) 

    [1] => Array 
     (
      [votes] => Array 
       (
        [UP] => 1 
        [DOWN] => 0 
        [POINTS] => 4 
       ) 

     ) 

    [2] => Array 
     (
      [votes] => Array 
       (
        [UP] => 1 
        [DOWN] => 0 
        [POINTS] => 2 
       ) 

     ) 

    [3] => Array 
     (
      [votes] => Array 
       (
        [UP] => 1 
        [DOWN] => 0 
        [POINTS] => 1 
       ) 

     ) 

) 
+0

你給我的功能似乎不起作用。我不確定它是否是CodeIgniter或函數中的某些內容。我嘗試將該函數作爲插件加載,並且似乎出錯。我不確定錯誤是什麼,因爲我的錯誤沒有顯示。錯誤發生的唯一時間是用cmp調用usort函數。 – DevNull 2010-12-04 02:36:56

0

解決方案: -

假設,你的數組存儲在一個名爲變量$數據

你可以簡單的排序您的多維數組array_multisort

foreach ($data as $key => $row) { 
    $points[$key] = $row['votes']['points']; 
} 

// Sort the data with points descending 
array_multisort($points, SORT_DESC, $data); 

希望這有助於。