"111","2"=>"222","3"=>"333"); foreach($arr as $key=>$value)"/> "111","2"=>"222","3"=>"333"); foreach($arr as $key=>$value)">
Rumah > pembangunan bahagian belakang > tutorial php > php中foreach引用出现的问题分析

php中foreach引用出现的问题分析

伊谢尔伦
Lepaskan: 2023-03-11 09:10:01
asal
1210 orang telah melayarinya

1,foreach 是php 对数组循环输出。

示例:

$arr = array("1"=>"111","2"=>"222","3"=>"333");
foreach($arr as $key=>$value)
{
  echo $key."=>".$value."\n";
}
Salin selepas log masuk

结果如下:

1=>111
2=>222
3=>333
Salin selepas log masuk

2,稍作修改:

foreach($arr as $key=>$value)
{
//echo $key."=>".$value."\n";
$key = &$arr[$key];
}
print_r($arr);
Salin selepas log masuk

结果如下:

Array
(
    [1] => 2
    [2] => 3
    [3] => 333
)
Salin selepas log masuk
Salin selepas log masuk

代码解释:

我们发现,原来的数组被修改了,是为什么呢?我们来研究一下。

代码中关键的地方是:$key = &$arr[$key];

$key 为 $arr[$key] 的引用,也就是,当$key 被修改的时候,$arr[$key] 也被修改为对应的值。

首先,我们要了解一下,foreach 的原理,它是将数组的值,分别赋值给$key 和 $value ;

所以,$key ,$value 也是普通的一个变量

接着分析,第一遍循环时,$key = &$arr[$key];意思是 &$arr[1] 指向$key 这个变量。

foreach 循环到第二遍的时候,首先,$key 被赋值为2,此时,再关注一下,$key = &$arr[$key];

结果是:$arr[1] 被赋值为此时的新的$key ,也就是2.

第二遍循环结束后,原来的数组变为:

Array
(
    [1] => 2
    [2] => 222
    [3] => 333
)
Salin selepas log masuk

同理,第三次循环结束后,则为:

Array
(
    [1] => 2
    [2] => 3
    [3] => 333
)
Salin selepas log masuk
Salin selepas log masuk

到此,已经大概说明白了。

3,为了更清楚的明白,foreach 中的赋值过程,我们可以这样:

$arr = array("1"=>"111","2"=>"222","3"=>"333");
foreach($arr as $key=>$value)
{
$key  = &$arr[$key];
$key = "hello";
unset($key);
print_r($arr);
}
Salin selepas log masuk

结果如下:

Array
(
    [1] => hello
    [2] => 222
    [3] => 333
)
Array
(
    [1] => hello
    [2] => hello
    [3] => 333
)
Array
(
    [1] => hello
    [2] => hello
    [3] => hello
)
Salin selepas log masuk

代码解释:

我们直接在每次循环中,给$key 赋值为 “hello ”,为了不影响,然后,把$key 变量释放掉。

这样应该,就比较清楚了吧。

Atas ialah kandungan terperinci php中foreach引用出现的问题分析. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Isu terkini
Berbuka jika dan foreach
daripada 1970-01-01 08:00:00
0
0
0
Masalah gelung, foreach
daripada 1970-01-01 08:00:00
0
0
0
Mengenai parameter php foreach
daripada 1970-01-01 08:00:00
0
0
0
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan