[请益] 多个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