有個猜用戶喜歡的功能,用戶可以點擊換一組,來刷新推薦的內容。
先透過資料庫查詢,得到前1000條數據,然後隨機移除4條。
程式寫完之後,發現運行的很慢,每次刷新,都要等很久才出來。
程式碼如下:
$arr = range(1, 100000); $start = time(); for($i = 0; $i < 100; $i ++){ $key = mt_rand(0, 99999 - $i); $result[] = $arr[$key]; unset($arr[$key]); sort($arr); } $end = time(); echo $end - $start;
上面的寫法,用unset之後,必須進行排序。
unset只會刪除鍵值,而key會保留。
經過改進之後的寫法如下:
$arr = range(1, 100000); $start = time(); for($i = 0; $i < 100; $i ++){ $key = mt_rand(0, 99999 - $i); $result[] = array_splice($arr, $key, 1); } $end = time(); echo $end - $start;
效率提高了3-4倍。