根据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。
答案 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
。