這篇文章主要介紹了關於淺談PHP源碼十七:關於array_diff,array_udiff,array_diff_ukey,array_diff_uassoc,array_udiff_uassoc的介紹,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
淺談PHP源碼十七:關於array_diff,array_udiff,array_diff_ukey,array_diff_uassoc,array_udiff_uassoc的介紹
這4個函數調用的是同一個函數php_array_diff,所不同的是他們的參數。
雖然這五個函數都是調用同一個方法,但是在這個方法中,除了對輸入的處理和釋放相關記憶體的操作外,程式的共用並不是太多
難道是因為在語義的相似?
array_diff: php_array_diff(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIFF_NORMAL, DIFF_COMP_DATA_INTERNAL, DIFF_COMP_KEY_INTERNAL); array_diff_ukey: php_array_diff(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIFF_KEY, DIFF_COMP_DATA_INTERNAL, DIFF_COMP_KEY_USER); array_udiff: php_array_diff(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIFF_NORMAL, DIFF_COMP_DATA_USER, DIFF_COMP_KEY_INTERNAL);farray_diff_uassoc: php_array_diff(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIFF_ASSOC, DIFF_COMP_DATA_INTERNAL, DIFF_COMP_KEY_USER); array_udiff_uassoc: php_array_diff(INTERNAL_FUNCTION_PARAM_PASSTHRU, DIFF_ASSOC, DIFF_COMP_DATA_USER, DIFF_COMP_KEY_USER);
程式說明:
在獲得了輸入和作了相關錯誤處理後
程式首先確認比較函數是哪個,此處,針對不同的behavior和data_compare_type有不同的比較函數,也有不同的輸入參數錯誤處理
然後對輸入的參數複製並按照之前得到的diff_key_compare_func進行排序,排序調用的是zend_qsort函數
然後初始化返回數組的hash table,並將第一個參數複製到返回數組
最後遍曆第一個參數的所有值,並判斷是否不在其它參數中,
在遍曆過程中,如果某一個值在其它參數中則刪除返回數組中所有等於這個值的元素,如果某一個值不在其它參數中,則跳過
這樣留下來的就是需要返回的值。
以上就是本文的全部內容,希望對大家的學習有所協助,更多相關內容請關注topic.alibabacloud.com!