为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
天涯尽头无女友 2019-03-18 15:27:20
在写代码的时候遇见一个和诡异的问题 $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" } 这是为什么呢 网上的样例没有说明为什么,求大佬解答,谢谢
查看完整描述

2 回答

?
慕哥9229398

TA贡献1877条经验 获得超6个赞

没有复现。。

var_dump(PHP_VERSION,$stack);

https://img1.sycdn.imooc.com//5c8f48560001c46a03240174.jpg

https://img1.sycdn.imooc.com//5c8f485700011ae804230194.jpg

可能是php7.1的新特性

https://img1.sycdn.imooc.com//5c8f48580001cd2e06880182.jpg

查看完整回答
反对 回复 2019-03-18
?
倚天杖

TA贡献1828条经验 获得超3个赞

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

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

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

查看完整回答
反对 回复 2019-03-18
  • 2 回答
  • 0 关注
  • 733 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信