1. 程式人生 > >php進行2維陣列多欄位排名方法

php進行2維陣列多欄位排名方法

一些專案中會出現這種情況,在使用者充值後進行排名(所謂的土豪榜,直播平臺常見)。從資料庫查出的是一個二維陣列,要根據充值數量的大小且使用者標識(uid)不能去除。一般的演算法也就是給一個簡單的一維陣列進行大小比較從而進行排序。想保留使用者標識是很難的。這裡告訴大家一個方法可以實現通過數量大小給排名且保留使用者標識。

我們首先模仿從資料庫裡查出的陣列

$data[] = array('id'=>1, 'num'=>10,'wow' =>456);
$data[] = array('id'=>2, 'num'=>15,'wow' =>46);
$data[] = array('id'=>3, 'num'=>14,'wow' =>56);
$data[] = array('id'=>4, 'num'=>15,'wow' =>45);
$data[] = array('id'=>5, 'num'=>13,'wow' =>4);
$data[] = array('id'=>6, 'num'=>12,'wow' =>68);
$data[] = array('id'=>7, 'num'=>16,'wow' =>1);

不要在乎欄位為什麼是wow  因為我是打魔獸的。這裡通過給num進行排序   且繼續保留對應ID。

成功後的樣子應該是這樣

$data[] = array('id'=>7, 'num'=>16,'wow' =>1);
$data[] = array('id'=>2, 'num'=>15,'wow' =>46);
$data[] = array('id'=>4, 'num'=>15,'wow' =>45);
$data[] = array('id'=>3, 'num'=>14,'wow' =>56);
$data[] = array('id'=>5, 'num'=>13,'wow' =>4);
$data[] = array('id'=>6, 'num'=>12,'wow' =>68);
$data[] = array('id'=>1, 'num'=>10,'wow' =>456);

好下面開始程式碼示例

上面已經有了陣列   這裡直接對陣列進行操作

 

給陣列進行迴圈,重組資料(為了給下面的方法傳參不報錯)

foreach ($data as $k => $v) {
    $num[$k] = $v['num'];
}

接下來這個方法很關鍵(核心) 

array_multisort()      預設引數有 SORT_ASC(按照上升順序排序)        SORT_REGULAR(將專案按照通常方法比較)

接下來傳參然後輸出資料看結果

array_multisort($num,SORT_DESC,$data,預設引數可不填寫);

var_dump($data);

你就可以看到上述的排序