• 手机版

    扫码体验手机版

  • 微信公众号

    扫码关注公众号

国内首家协议开发

软芯音视解码保护平台

在线
客服

发布
需求

在线
聊天

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

php 笔试题

$array = array(1,2,3);foreach($array as &$val){        echo "";        print_r($val);}foreach($array as $val){        echo "";        print_r($val);}echo implode($array);为啥结果是122呢 求解释

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与1

第一次foreach循环采用了 &$val 是变量引用,在结束循环后,变量$val存储的是 数组$array第三个元素的地址。
后面的foreach循环使用到变量$val是变量复制,赋值内容为元素的值。看第二个foreach逐条循环
第一条循环后 $val = 1,此时由于在上一个foreach中$val最后保存了第三个元素的地址,所以现在赋值就是将值 1,赋给第三个元素地址对应的值部分,即此时数组 $array为 [1, 2, 1]
第二条循环后 $val = 2 , 此时赋值就是将值 2,赋给第三个元素地址对应的值部分,即此时数组 $array为 [1, 2, 2]
第三条循环后 $val = 2, 注意此时因为在第二条已经改变了第三个元素的值,此时取出结果是2,再次赋值还是将值2,赋给第三个元素地址对应的值部分,即此时数组$array还是为 [1, 2, 2]
所以问题的关键在于引用类型保存了元素的地址,再下面代码使用就存在覆盖值的问题。即使不是第二次foreach,是单独赋值也一样会被污染覆盖。所以第一次foreach 采用引用类型后应 unset($val)。

使用道具 举报

发新帖

发布任务需求已有1031166位用户正在使用天盟网服务

发布分类: *
任务预算: *
需求内容: *
手机号码: *
任务商家报价为
  • 预算价 :
  • 成交价 :
  • 完工期 :
  • 质保期 :

* 最终任务项目以服务商报价、双方协商为准!