关于php7中foreach与php5输出值不同的问题

在写代码的时候遇见一个和诡异的问题


$stack = '';
$collections = [1,2,3,4,5,6];
foreach($collections as $key => $collection) {
   $stack[$key] = $collection . '_' . $key;
}
var_dump($stack);

同样的代码,在php7中输出是1234567

但是在php5中却是

array(7) {
[0]=>
string(3) "1_0"
[1]=>
string(3) "2_1"
[2]=>
string(3) "3_2"
[3]=>
string(3) "4_3"
[4]=>
string(3) "5_4"
[5]=>
string(3) "6_5"
[6]=>
string(3) "7_6"
}

这是为什么呢

网上的样例没有说明为什么,求大佬解答,谢谢

天涯尽头无女友
浏览 734回答 2
2回答

慕哥9229398

没有复现。。 var_dump(PHP_VERSION,$stack); 可能是php7.1的新特性

倚天杖

$stack = '';这句把$stack定义为字符串了。后面的计算都按字符串类型运算。字符串的话,$stack[0]就是$stack字符串的第一个字符,且长度只是一位,以此类推。第一次循环: $tack = '1' //$stack[0]只是一个字符,所以不会有后面的'_'; 重点是 $stack[n] 都只代表这个字符串的第几个字符。而且只是一个字符。只会取赋值的第一个字符。 $stack = [] 就正常了。php7 和 php5 的一个区别就是变量类型更严格一些
打开App,查看更多内容
随时随地看视频慕课网APP