PHP去重演算法的優化過程

2022-07-15 04:06:11 字數 819 閱讀 6029

最近公司在做乙個專案,需要對爬取到的資料進行去重,方法就是根據資料的id,去除掉id重複的資料。

下面是這個方法的演化過程。

//

去重$arr_id = array

();$letvfeedlist = array

();for ($i = 0; $i

< count($arrfeedlist); $i++)

}

從上面的演算法中可以看到,上面的演算法用了兩個陣列,兩個迴圈,所以它的時間複雜度為o(n^2),空間複雜度為o(2n)。上面的演算法,我們可以從in_array()入手,考慮下面的因素。

用陣列的id作陣列下標,來儲存爬取到的資料值。

//

去重$tmp_arr = array

();for ($i = 0; $i

< min(count($arrfeedlist),10); $i++)

$arrletvfeedlist = array

();foreach ($tmp_arr

as$key => $value

)

這裡用了兩個迴圈,兩個陣列,時間複雜度是o(2n),空間複雜度是o(2n).

後來又對迴圈進行了優化,變成如下**:

//

去重$tmp_arr = array

();$arrletvfeedlist = array

();foreach ($arrfeedlist

as$key => $value

)}

isset是速度要快於for迴圈,以上**是最終版本

陣列去重的優化

使用php的array unique 函式允許你傳遞乙個陣列,然後移除重複的值,返回乙個擁有唯一值的陣列。這個函式大多數情況下都能工作得很好。但是,如果你嘗試在乙個大的陣列裡使用array unique 函式,它會執行地慢一些。有乙個比較好而且更快的函式array flip 來替代使用array u...

php 陣列去重

一維陣列的重複項 使用array unique函式即可,使用例項如下 bb array unique aa print r bb 二維陣列的重複項 對於二維陣列咱們分兩種情況討論,一種是因為某一鍵名的值不能重複,刪除重複項 另一種因為內部的一維陣列不能完全相同,而刪除重複項,下面舉例說明 因為某一鍵...

php 陣列去重

一維陣列的重複項 使用array unique函式即可,使用例項如下 bb array unique aa print r bb 二維陣列的重複項 對於二維陣列咱們分兩種情況討論,一種是因為某一鍵名的值不能重複,刪除重複項 另一種因為內部的一維陣列不能完全相同,而刪除重複項,下面舉例說明 因為某一鍵...