This article mainly introduces the introduction to PHP source code seventeen: about array_diff, array_udiff, array_diff_ukey, array_diff_uassoc, array_udiff_uassoc. It has a certain reference value. Now I share it with you. Friends in need can refer to it
A brief discussion of PHP source code seventeen: Introduction to array_diff, array_udiff, array_diff_ukey, array_diff_uassoc, array_udiff_uassoc
These four functions call the same function php_array_diff, the difference is their parameters.
Although these five functions all call the same method, in this method, except for the processing of input and the operation of releasing related memory, there is not much sharing of programs.
Is it because of the semantics? resemblance?
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);f array_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);
Program description:
After obtaining the input and performing related error handling
The program first confirms which comparison function is. Here, there are different values for different behaviors and data_compare_type The comparison function also has different input parameter error handling
Then the input parameters are copied and sorted according to the previously obtained diff_key_compare_func. The sorting call is the zend_qsort function
Then initialize the hash table of the returned array and add the first Copy the parameters to the return array
Finally traverse all the values of the first parameter and determine whether they are not in other parameters.
During the traversal process, if a certain value is in other parameters, delete all values in the return array that are equal to this Value element, if a certain value is not in other parameters, skip
so that what remains is the value that needs to be returned.
The above is the entire content of this article. I hope it will be helpful to everyone's study. For more related content, please pay attention to the PHP Chinese website!
Related recommendations:
A brief discussion on PHP source code 16: About the array_count_values function
## A brief discussion on PHP source code 15: About array_walk function
A brief discussion on PHP source code 14: About array_combine function
The above is the detailed content of A brief discussion of PHP source code seventeen: Introduction to array_diff, array_udiff, array_diff_ukey, array_diff_uassoc, array_udiff_uassoc. For more information, please follow other related articles on the PHP Chinese website!