array_unique()在7.1和7.2之间更改

时间:2019-02-11 19:37:31

标签: php

根据PHP 7.2 backward incompatible changes(强调我的意思):

  

虽然使用SORT_STRING的array_unique()以前复制了数组并删除了非唯一元素(此后不打包数组),但是现在通过添加唯一元素来构建新数组。 这会导致不同的数字索引。

但是我无法编写一个示例,其中array_unique在PHP 7.1和PHP 7.2中产生不同的结果:

ARRAY="[1,'2',1,2,'1']"
echo "var_dump(array_unique(${ARRAY}, SORT_STRING));" | 
     sudo docker run --rm -i php:7.1-cli > 7.1
echo "var_dump(array_unique(${ARRAY}, SORT_STRING));" | 
     sudo docker run --rm -i php:7.2-cli > 7.2
diff -s 7.?
Files 7.1 and 7.2 are identical

对于它的价值,我正在Linux上的Docker容器中运行PHP。

1 个答案:

答案 0 :(得分:3)

array_unique之后,您将无法直接观察到任何更改;被保留的元素及其索引定义良好,因此没有发生变化。

但是结果数组的内部状态在7.1和7.2中略有不同。在这种情况下,“最高使用量”数字键是不同的。一旦添加更多元素,这将导致不同的数组。

这是一个简单的例子:

$a = [0,0];
$b = array_unique($a);
$b[] = 1;
var_dump($b);

3v4l上的结果。

在PHP 7.1中,键1确实存在于$ b中,并在array_unique调用期间被删除。下一个自由键是2。

在PHP 7.2+中,键1从未存在,将用于$b[] = 1