PHP陣列交集的優化

2021-05-24 06:11:17 字數 671 閱讀 4536

假設我們正在運營乙個手機相關的**,使用者可以通過指定若干引數(如作業系統,螢幕解析度,攝像頭畫素等等)來篩選自己想要的手機。不過由於手機的 引數多,且不同的手機其引數差異大,所以參數列結構通常是縱表(乙個引數是一行),而不是橫表(乙個引數是一列),此時使用若干引數來取結果,通常就是把 每個單獨引數來取結果,再一起取交集。

假定每個引數會包含一千個左右的產品id(int),以此為前提來模擬生成一些資料:

注意:如果測試資料集過小的話,結論可能會出現不一致。

先看看通過php內建方法array_intersect實現的效能:

在優化之前,我們先來看看array_intersect一些特殊的地方:

也就是說,如果在第乙個陣列引數中有重複元素的話,則array_intersect會返回所有滿足條件的重複元素。改寫array_intersect的時候最好相容這些功能。

下面看看通過自定義方法int_array_intersect實現的效能:

直覺上,我們肯定會認為內建函式快於自定義函式,但本例中結果恰恰相反:

為什麼?原因在於int_array_intersect操作的都是整數,而array_intersect操作的都是字串,即便你傳給它整數,也會當做字串處理。

注:測試結果基於php5.3.5,不同版本結論可能存在差異

參考:faster array_intersect

PHP陣列交集函式的例項講解

php陣列交集的獲取,在php中,給我們提供了非常豐富的陣列操作函式,無需重寫,直接用即可。本教程主要講解兩個函式,array intersect 與array intersect assoc 直接看 array intersect 函式返回乙個保留了鍵的陣列,這個陣列只由第乙個陣列中出現的且在其他...

PHP實現的陣列交集運算

php實現的陣列交集運算,使用遞迴方式進行陣列的合併運算,在編碼過程中應該注意到array merge 以及array merge recursive 在陣列合併時的差異。array merge 把兩個或多個陣列合併為乙個陣列。如果鍵名有重複,該鍵的鍵值為最後乙個鍵名對應的值 後面的覆蓋前面的 如果...

php 兩陣列交集 差集

array intersect 計算陣列的交集說明 array array intersect array array1,array array2 array array intersect 返回乙個陣列,該陣列包含了所有在 array1 中也同時出現在所有其它引數陣列中的值。注意鍵名保留不變。例子...