Soalan mengenai php untuk rujukan setiap
typecho
typecho 2017-07-04 13:45:55
0
3
874

Selepas foreach menggunakan & untuk melintasi array arr2, ia melintasi array semula.
Kod adalah seperti berikut:

    $arr2 = ['a','s','d'];
    foreach ($arr2 as $k => &$v){
        echo $k." ".$v."<br>";
    }
    //unset($v);
    foreach ($arr2 as $k => $v){
        echo $k." ";
        echo $v." ".current($arr2)."<br>";
    }

Keputusan:
0 a
1 s
2 d
0 a a
1 s a
2 s a

Mengapa penunjuk berhenti apabila ia bergerak ke s semasa traversal kedua?

typecho
typecho

Following the voice in heart.

membalas semua(3)
迷茫

Atau anda boleh lakukan ini:

<?php

$arr2 = ['a','s','d'];

foreach ($arr2 as $k => &$v){
    echo $k." ".$v.PHP_EOL;
}

while(current($arr2)) {
    echo key($arr2).'->'.current($arr2).PHP_EOL;
    next($arr2);
}

Keluaran:

0 a
1 s
2 d
0->a
1->s
2->d
phpcn_u1582

Satu lagi

foreach()循环对数组内部指针不再起作用,在PHP7之前,当数组通过foreach迭代时,数组指针会移动。
    现在开始,不再如此,见下面代码。。
$array = [0, 1, 2];
foreach ($array as &$val) 
{
var_dump(current($array));
}
PHP5运行的结果会打印int(1) int(2) bool(false)
PHP7运行的结果会打印三次int(0),也就是说数组的内部指针并没有改变。
之前运行的结果会打印int(1), int(2)和bool(false)
我想大声告诉你

Sebab:

  • Dalam foreach中采取了引用传递的方式,第一次循环$v指向$arr2[0]的存储空间,第二次指向> $arr2[1]的存储空间,循环结束则指向$arr2[2] ruang simpanan pertama;

  • Dalam foreach中采取了值传递的方式,第一次循环给$v赋值了a,即给$arr2[2]赋值了a,第二次同上,$arr2[2]的值变为了$arr2[1]的值,则$arr2变成了[a,s,s] kedua, jadi elemen terakhir tatasusunan menjadi nilai unsur terakhir

Penyelesaian:

  • Pada yang pertama foreach结束后加一句unset($v);

  • Kali keduaforeach循环不用$vTukar pembolehubah dengan nama lain

Rujukan:

  • Masalah menggunakan foreach untuk menukar nilai array dalam php

  • nilai objek kelas tatasusunan php lulus rujukan lulus perbezaan

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan