[請益] 多個array 排序很慢

作者: CuCuGi (咕咕雞)   2015-08-28 16:41:06
大家好 小弟最近碰到排序的問題
主要是用於 fb的讚數排列
usort($postArray,'sortByLikeCount');
function sortByLikeCount($a, $b)
{
return ($a["likeCount"] <= $b["likeCount"]) ? -1 : 1;
}
發現如果array過於大量(八萬筆左右)會排很久...
(之前有參考github上python的寫法
postArray.sort(key=lambda x: x["likeCount"], reverse=True)
發現排列非常的快)
不知道在php中要怎麼修改才能更快的完成排序呢?謝謝各位
作者: y2468101216 (芸)   2015-08-28 17:11:00
用asort?沒事 當我沒說如果內建不夠快可能要再切小一點,改成多次執行?
作者: bibo9901 (function(){})()   2015-08-28 20:45:00
php的array是pass-by-value,也就是說傳入自訂cmp函式時會複製兩次, 然後swap時又要複製兩次, 我猜是慢在這.你試試把 array of arrays 改成 array of objects
作者: alog (A肉哥)   2015-08-29 00:06:00
去找搜尋跟排序演算法的書來看,你應該會有其他靈感
作者: xdraculax (首席怪叔叔)   2015-08-29 13:11:00
沒搞過這麼大陣列,經樓樓上這麼提示,大陣列自己排比較好
作者: GALINE (天真可愛CQD)   2015-08-29 16:37:00
實際做十萬筆資料在機器上試跑,大概一秒...感覺還好?一個可能是直接拿 FB 回傳的資料來 sort,因為裡面太大包記憶體操作太久。可以先做一個只有 id 跟 likecount 的陣列單獨排序,排完之後再用那個 id 回去取資料來用
作者: fri13 (思考跳tone記性差)   2015-08-31 16:25:00
有考慮丟進資料庫嗎?
作者: IhaveASecret (人都有秘密)   2015-09-02 12:59:00
請問實際上跑了多久?
作者: xdraculax (首席怪叔叔)   2015-09-03 17:59:00
相等要傳 0 或 1

Links booklink

Contact Us: admin [ a t ] ucptt.com