两次结果输出不一样,老师解释下,为啥第一次打印的是字符串

两次结果输出不一样,老师解释下,为啥第一次打印的是字符串

$stack ='';

$collections = [1,2,3,4,5,6,7];

foreach($collections as $key => $collection) {

$stack[$key] = $collection . '_' . $key;

}

var_dump($stack);//打印出来是一个字符串,理解?string(7) "1234567"


echo '<br>';


$stack =[];

$collections = [1,2,3,4,5,6,7];

foreach($collections as $key => $collection) {

$stack[$key] = $collection . '_' . $key;

}



var_dump($stack);//输出是数组

/*

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"

*/


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
imooc_澈 2018-06-11 11:15:01

你好,因为前面你将变量$stack定义为字符串,后面将$stack定义为数组,最后的结果就是字符串和数组。

如果解决了你的问题,请采纳,祝学习愉快~

  • 提问者 慕盖茨6742792 #1
    不明白,遍历循环体我是在赋值
    2018-06-11 11:28:12
  • imooc_澈 回复 提问者 慕盖茨6742792 #2
    第一个你在前面将$stack定义为了空字符串,后面遍历中给$stack[]赋值,程序默认将这里的[]当成字符串下标了,最后输出的也是字符串,第二个你将$stack定义为一个空数组,$stack=[],那$stack就是一个数组,你后面循环中复制就是在给这个数组赋值。如果你前面没有做过任何定义,直接在循环中进行$stack[]=value这样的赋值,那变量会直接被默认为数组。关键是你在前面分别定义过,那就会跟着你的定义走。
    2018-06-11 11:51:59
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师