[請益] 多個array 排序很慢

看板PHP作者 (咕咕雞)時間10年前 (2015/08/28 16:41), 編輯推噓5(5011)
留言16則, 7人參與, 最新討論串1/2 (看更多)
大家好 小弟最近碰到排序的問題 主要是用於 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中要怎麼修改才能更快的完成排序呢?謝謝各位 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.127.174.109 ※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1440751273.A.2CB.html

08/28 17:11, , 1F
用asort?
08/28 17:11, 1F

08/28 17:11, , 2F
沒事 當我沒說
08/28 17:11, 2F

08/28 17:12, , 3F
如果內建不夠快可能要再切小一點,改成多次執行?
08/28 17:12, 3F

08/28 20:45, , 4F
php的array是pass-by-value,也就是說傳入自訂cmp函式時
08/28 20:45, 4F

08/28 20:46, , 5F
會複製兩次, 然後swap時又要複製兩次, 我猜是慢在這.
08/28 20:46, 5F

08/28 20:47, , 6F
你試試把 array of arrays 改成 array of objects
08/28 20:47, 6F

08/29 00:06, , 7F
去找搜尋跟排序演算法的書來看,你應該會有其他靈感
08/29 00:06, 7F

08/29 13:11, , 8F
沒搞過這麼大陣列,經樓樓上這麼提示,大陣列自己排比
08/29 13:11, 8F

08/29 13:11, , 9F
較好
08/29 13:11, 9F

08/29 16:37, , 10F
實際做十萬筆資料在機器上試跑,大概一秒...感覺還好?
08/29 16:37, 10F

08/29 16:38, , 11F
一個可能是直接拿 FB 回傳的資料來 sort,因為裡面太大包
08/29 16:38, 11F

08/29 16:38, , 12F
記憶體操作太久。可以先做一個只有 id 跟 likecount 的
08/29 16:38, 12F

08/29 16:39, , 13F
陣列單獨排序,排完之後再用那個 id 回去取資料來用
08/29 16:39, 13F

08/31 16:25, , 14F
有考慮丟進資料庫嗎?
08/31 16:25, 14F

09/02 12:59, , 15F
請問實際上跑了多久?
09/02 12:59, 15F

09/03 17:59, , 16F
相等要傳 0 或 1
09/03 17:59, 16F
文章代碼(AID): #1Lu1wfBB (PHP)
討論串 (同標題文章)
文章代碼(AID): #1Lu1wfBB (PHP)