Re: [请益] 多个array 排序很慢

楼主: IhaveASecret (人都有秘密)   2015-09-02 13:02:25
※ 引述《CuCuGi (咕咕鸡)》之铭言:
: 大家好 小弟最近碰到排序的问题
: 主要是用于 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中要怎么修改才能更快的完成排序呢?谢谢各位
试试以下
echo "initial: ". microtime() ."<br />" ;
$postArray = array() ;
for($i = 0 ; $i < 100000 ; $i++) {
$postArray[$i]["id"] = $i+1 ;
$postArray[$i]["likeCount"] = rand(1,1000) ;
}
echo "initial END: ".microtime() ."<br />" ;
// 排序 1
echo "Sort 1 Start: ".microtime() ."<br />" ;
$total = array() ;
foreach ($postArray as $key => $row) {
$total[$key] = $row['likeCount'] ;
}
array_multisort($total, SORT_DESC, $postArray) ;
echo "Sort 1 END: ".microtime() ."<br />" ;
// 排序 2: 你的方法
echo "Sort 2 Start:".microtime() ."<br />" ;
usort($postArray,'sortByLikeCount');
function sortByLikeCount($a, $b) {
return ($a["likeCount"] <= $b["likeCount"]) ? -1 : 1;
}
echo "Sort 2 END: ".microtime() ."<br />" ;
echo "END" ;
作者: xdraculax (首席怪叔叔)   2015-09-03 15:28:00
推实测,但两个方法要分开测第一个已经排好第二个就省很多时间第一个是递减排第二个是递增排?
楼主: IhaveASecret (人都有秘密)   2015-09-04 15:11:00
我忘了改 Sort 1 的递增、递减。10万笔测下来,Sort 1 就是比 Sort 2 快上 1 秒,原Po看到可以试试看 :)

Links booklink

Contact Us: admin [ a t ] ucptt.com