两个例子弄懂PHP引用传值

2020-09-04  本文已影响0人  乔四儿丶

例1

$a=[1,2,3];  
foreach($a as &$v){
   print($v);
   print_r($a);
}  
foreach($a as $v){
   print($v);
   print_r($a);
} 
// 执行结果
1Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
2Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
3Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
1Array
(
    [0] => 1
    [1] => 2
    [2] => 1
)
2Array
(
    [0] => 1
    [1] => 2
    [2] => 2
)
2Array
(
    [0] => 1
    [1] => 2
    [2] => 2
)

解读:

  1. 第一个循环没什么特别,只是在遍历数组的最后一个元素后,'$v'值的地址指向数组的最后一个元素
  2. 第二个循环的第一次遍历,遍历数组的第一个元素,'foreach($a as $v)' 这个操纵会把第一个元素赋值给'$v',而且此时'$v'的地址指向数组的最后一个元素,所以第一次遍历后数组是{1,2,1}
  3. 第二个循环的第二次遍历,同上
  4. 第二个循环的第三次遍历,此时循环遍历的值刚好是'$v'地址指向的值

例2

$d = ['a', 'b', 'c'];
foreach($d as $k => $val)
{
  $val = &$d[$k];
  print($val);
  print_r($d);
}
// 执行结果
aArray
(
    [0] => a
    [1] => b
    [2] => c
)
bArray
(
    [0] => b
    [1] => b
    [2] => c
)
cArray
(
    [0] => b
    [1] => c
    [2] => c
)

解读:

  1. 循环的第一次遍历,将'$val'的值指向数组的第一个值的地址
  2. 循环的第二次遍历,'foreach($d as $k => $val)'这个操作把'$val'赋值成'b',所以数组的第一个元素也变成'b'
  3. 循环的第三次遍历,同上
上一篇下一篇

猜你喜欢

热点阅读