以下源码基于 PHP 7.3.8

array array_unique ( array array[,intsort_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 文件中。由于

Copy
PHP_FUNCTION(array_unique){ // code... }

篇幅过长,完整代码不在这里贴出来了,可以参见 GitHub 贴出的源代码。

定义变量

Copy
    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 头文件中定义。

Copy