淺談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,并將第一個參數復制到返回數組
最后遍歷第一個參數的所有值,并判斷是否不在其它參數中,
在遍歷過程中,如果某一個值在其它參數中則刪除返回數組中所有等于這個值的元素,如果某一個值不在其它參數中,則跳過
這樣留下來的就是需要返回的值。
以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !
相關推薦:
淺談PHP源碼十六:關于array_count_values函數
淺談PHP源碼十五:關于array_walk函數
淺談PHP源碼十四: 關于array_combine函數
以上就是淺談PHP源碼十七:關于array_diff,array_udiff,array_diff_ukey,array_diff_uassoc,array_udiff_uassoc的介紹的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答