看板 PHP 關於我們 聯絡資訊
大家好 小弟最近碰到排序的問題 主要是用於 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
y2468101216: 用asort? 08/28 17:11
y2468101216: 沒事 當我沒說 08/28 17:11
y2468101216: 如果內建不夠快可能要再切小一點,改成多次執行? 08/28 17:12
bibo9901: php的array是pass-by-value,也就是說傳入自訂cmp函式時 08/28 20:45
bibo9901: 會複製兩次, 然後swap時又要複製兩次, 我猜是慢在這. 08/28 20:46
bibo9901: 你試試把 array of arrays 改成 array of objects 08/28 20:47
alog: 去找搜尋跟排序演算法的書來看,你應該會有其他靈感 08/29 00:06
xdraculax: 沒搞過這麼大陣列,經樓樓上這麼提示,大陣列自己排比 08/29 13:11
xdraculax: 較好 08/29 13:11
GALINE: 實際做十萬筆資料在機器上試跑,大概一秒...感覺還好? 08/29 16:37
GALINE: 一個可能是直接拿 FB 回傳的資料來 sort,因為裡面太大包 08/29 16:38
GALINE: 記憶體操作太久。可以先做一個只有 id 跟 likecount 的 08/29 16:38
GALINE: 陣列單獨排序,排完之後再用那個 id 回去取資料來用 08/29 16:39
fri13: 有考慮丟進資料庫嗎? 08/31 16:25
IhaveASecret: 請問實際上跑了多久? 09/02 12:59
xdraculax: 相等要傳 0 或 1 09/03 17:59