一些項目中會出現這種情況,在用戶充值後進行排名(所謂的土豪榜,直播平臺常見)。從數據庫查出的是一個二維數組,要根據充值數量的大小且用戶標識(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);
你就可以看到上述的排序