作者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/cn.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