透過閉包定義自訂比較規則來合併和去重數組,閉包接受兩個元素並傳回布林值表示相等性,相等的元素將被捨棄。透過遍歷數組並使用閉包去重,最終實現自訂規則的數字組合併去重。
PHP 數組合併去重演算法:基於閉包的自訂規則
在PHP 開發中,我們經常需要合併數組並去重。但是,預設的 array_merge()
函數並不能滿足所有場景,尤其是當合併的元素需要根據自訂規則去重時。本文將介紹一種基於閉包的演算法,實現自訂規則的數組合併去重操作。
演算法原理
演算法透過使用閉包作為比較函數,實現自訂的去重規則。閉包接收兩個元素作為參數,並傳回一個布林值,表示兩個元素是否相等。如果兩個元素被閉包判定為相等,則只保留其中一個。
程式碼實作
function array_merge_distinct(array $arr1, array $arr2, callable $compare_func) { $result = []; foreach ($arr1 as $key => $value) { $found = false; foreach ($arr2 as $key2 => $value2) { if ($compare_func($value, $value2)) { $found = true; break; } } if (!$found) { $result[$key] = $value; } } return array_merge($result, $arr2); }
實戰案例
假設我們有兩個陣列:
$arr1 = ['a', 'b', 'c']; $arr2 = ['b', 'd', 'e'];
我們若要依照下列規則合併並去重數組:
我們可以使用閉包實作這個比較規則:
$compare_func = function ($value1, $value2) { return $value1 === $value2; };
然後,將閉包當作參數傳遞給array_merge_distinct()
函數:
$merged = array_merge_distinct($arr1, $arr2, $compare_func);
合併後的陣列為:
echo print_r($merged, true);
輸出:
Array ( [0] => a [1] => b [2] => c [3] => d [4] => e )
#擴展
該演算法可以根據需要進行擴展,以支援更複雜的比較規則或自訂行為。例如,我們可以根據物件的屬性來進行比較,或根據元素的雜湊值去重等。
以上是PHP 數組合併去重演算法:基於閉包的自訂規則的詳細內容。更多資訊請關注PHP中文網其他相關文章!