PHP引用问题-数组中foreach使用引用(二)

本文深入探讨PHP中引用的概念及其实现方式,特别是在循环中使用引用的细节。通过实例解析了数组元素在引用作用下的变化过程,揭示了$i变量在两次循环间的影响,帮助读者理解PHP引用的高级用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前段时间换工作,前后面试了大概两个礼拜,有十几家公司。现在把遇到的频率比较高的题目整理出来,给年后需要找工作的小伙伴参考。

在PHP 中引用的意思是:不同的名字访问同一个变量内容。
PHP地址相关的问题,一般喜欢两种形式的,一种是考察传值和传引用(具体可以参考请一篇文章PHP地址问题-传值与传引用(一))。另一种就是本篇文章说的,循环中使用引用(一般要修改数组中值,除了$k => $v形式,另一种就是&$v,感觉后一种逼格高一些)。
具体可以看下下面这个题目:

$arr = [1,2,3,4,5,6];
foreach ($arr as &$i) {
    $i = $i + 10;
}

foreach ($arr as $i) {
//   echo '<pre>';var_dump($array); echo "</pre>";
}

print_r($arr);

//运行结果
Array ( [0] => 11 [1] => 12 [2] => 13 [3] => 14 [4] => 15 [5] => 15 )

大部分人对前面5个值,可能没有疑惑。就不太明白为啥最后一个值还是15,这里就是$i惹的祸了。把第二次循环的$arr实时输出方便理解,单纯的想是有点难。

//运行过程中,第二个foreach循环时,$arr变化情况
array(6) {
  [0]=>
  int(11)
  [1]=>
  int(12)
  [2]=>
  int(13)
  [3]=>
  int(14)
  [4]=>
  int(15)
  [5]=>
  &int(11)
}
array(6) {
  [0]=>
  int(11)
  [1]=>
  int(12)
  [2]=>
  int(13)
  [3]=>
  int(14)
  [4]=>
  int(15)
  [5]=>
  &int(12)
}
array(6) {
  [0]=>
  int(11)
  [1]=>
  int(12)
  [2]=>
  int(13)
  [3]=>
  int(14)
  [4]=>
  int(15)
  [5]=>
  &int(13)
}
array(6) {
  [0]=>
  int(11)
  [1]=>
  int(12)
  [2]=>
  int(13)
  [3]=>
  int(14)
  [4]=>
  int(15)
  [5]=>
  &int(14)
}
array(6) {
  [0]=>
  int(11)
  [1]=>
  int(12)
  [2]=>
  int(13)
  [3]=>
  int(14)
  [4]=>
  int(15)
  [5]=>
  &int(15)
}
array(6) {
  [0]=>
  int(11)
  [1]=>
  int(12)
  [2]=>
  int(13)
  [3]=>
  int(14)
  [4]=>
  int(15)
  [5]=>
  &int(15)
}

看到这个输出就比较清楚了。
第一次循环完,$i是指向$arr最后一个值的引用。在第二次循环的时候,$i在循环遍历数组,同时在修改引用的值(数组的最后一个值)也可以理解存在:$i = &$i。

希望了解更多PHP引用相关知识可以看下知乎上的这篇文章:https://zhuanlan.zhihu.com/p/35107602

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值