PHP7源码之array_unique函数分析
以下源码基于 PHP 7.3.8
array array_unique ( array sort_flags = SORT_STRING ] )
(PHP 4 >= 4.0.1, PHP 5, PHP 7)
array_unique — 移除数组中重复的值参数说明:
array:输入的数组。
sort_flag:(可选)排序类型标记,用于修改排序行为,主要有以下值:SORT_REGULAR - 按照通常方法比较(不修改类型)
SORT_NUMERIC - 按照数字形式比较
SORT_STRING - 按照字符串形式比较
SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。
array_unique
函数的源代码在 /ext/standard/array.c 文件中。由于
PHP_FUNCTION(array_unique){ // code... }
篇幅过长,完整代码不在这里贴出来了,可以参见 GitHub 贴出的源代码。
定义变量
zval *array; uint32_t idx; Bucket *p; struct bucketindex *arTmp, *cmpdata, *lastkept; unsigned int i; zend_long sort_type = PHP_SORT_STRING; // 默认的排序规则 compare_func_t cmp;
首先是定义变量,array_unique
函数默认使用 PHP_SORT_STRING
排序,PHP_SORT_STRING
在 /ext/standard/php_array.h 头文件中定义。