关于foreach遍历

关于foreach遍历

<?php
  $arr = [0,1,2];
  $ref = &$arr;
  foreach($arr as $val){
    echo $val,'<br>';
    unset($arr[1]);
  }
 ?>

输出的是02

<?php
  $arr = [0,1,2];
  foreach($arr as $val){
    echo $val,'<br>';
    unset($arr[1]);
  }
 ?>

输出的是012

只是相差了$ref = &$arr这行代码,&取地址符不是引用吗,让数组$arr有了个别名,这行代码应该写不写不会影响输出结果。为什么结果会不一样呢?

php版本5.5

正在回答

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

1回答

您好,&代表引用传值。当使用&传入值时,会将原本的值改变。

<?php
  $arr = [0,1,2];
  $ref = &$arr;
  foreach($arr as $val){
    echo $val,'<br>';
    unset($arr[1]);
  }
 ?>

当第一次执行foreach时,输出0,执行unset($arr[1]);,此时$arr的值为$arr=[0,2];,再次循环输出2。

<?php
  $arr = [0,1,2];
  foreach($arr as $val){
    echo $val,'<br>';
    unset($arr[1]);
  }
 ?>

当程序第一次执行foreach时,输出0,执行unset($arr[1]);,此时$arr的值是没有改变的,因此输出1,再次循环输出2。

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

  • Thnik 提问者 #1
    非常感谢!
    2017-08-29 16:22:53
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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