关于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"
}

这是为什么呢

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

阅读 2k
2 个回答

没有复现。。

var_dump(PHP_VERSION,$stack);

clipboard.png

clipboard.png

可能是php7.1的新特性

clipboard.png

$stack = '';
这句把$stack定义为字符串了。后面的计算都按字符串类型运算。
字符串的话,$stack[0]就是$stack字符串的第一个字符,且长度只是一位,以此类推。
第一次循环: $tack = '1' //$stack[0]只是一个字符,所以不会有后面的'_';

重点是 $stack[n] 都只代表这个字符串的第几个字符。而且只是一个字符。只会取赋值的第一个字符。

$stack = [] 就正常了。
php7 和 php5 的一个区别就是变量类型更严格一些

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题