Array_unique SORT_REGULAR标志

dan*_*car 12 php

$array = array(1, '1a', '1');
var_export(array_unique($array, SORT_REGULAR));
Run Code Online (Sandbox Code Playgroud)
  • 结果:数组(0 => 1,2 =>'1')
  • 在PHP手册中:SORT_REGULAR - 正常比较项目(不要更改类型).

这背后的逻辑是什么?为什么或如何排除'1a'?

Jon*_*Jon 13

这是因为array_unique作品由第一分拣的值作为字符串,然后迭代过排序后的数组,并用于从所述结果不包括的每个值来比较等于给它的所有连续值.

根据第二个参数选择上面"比较相等"的比较函数,其SORT_REGULAR与用于等式检查的相同==.

这种行为引起了很多陷阱.由于排序是快速排序,它是不稳定的.因此,对包含两者的数组进行排序,1并'1'不能保证哪一个最终会成为结果中的第一个.这意味着在某些情况下和其他情况下array_unique可能会出现任意"偏好" .1'1'

然而,疯狂继续:考虑到,如果排序产生[1, '1', '1a']那么'1a'将不会在结果中包括(但比较相同1),而如果排序将产生['1', 1, '1a']那么它就会被包含(但不比较等于字符串'1')!