如果单纯使用变量,不用担心这点变化,例如如下代码
$arr = ['a','b','c'];
list($a, $b, $c) = $arr;
PHP5和PHP7中$a,$b,$c的值都相同,但是如果使用下面的代码
$arr = ['a','b','c'];
list($a[0], $a[1], $a[2]) = $arr;
这时候,$a的赋值顺序在PHP5和PHP7下是不同的,PHP 5 里,list() 从最右边的参数开始赋值,结果为
array(3) { [2]=> string(1) "c" [1]=> string(1) "b" [0]=> string(1) "a" }
PHP 7 里,list() 从最左边的参数开始赋值
array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" }
虽然看似结果一样,$a[0]都为a,但是如果你并不了解这种变化,直接使用array_values对$a进行了处理,结果就会变为
array(3) { [0]=> string(1) "c" [1]=> string(1) "b" [2]=> string(1) "a" }//PHP5
array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } //PHP7
很明显的变为了两种结果。因为文档中特意提到了
通常而言,不建议依赖于操作的顺序,在未来可能会再次发生修改。
因此在使用list的时候,尽量使用变量,而非使用具有索引的数组。