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