Rumah > pembangunan bahagian belakang > tutorial php > Mengapa Menggunakan Rujukan dalam Gelung Foreach PHP Membawa kepada Nilai Elemen Berulang?

Mengapa Menggunakan Rujukan dalam Gelung Foreach PHP Membawa kepada Nilai Elemen Berulang?

DDD
Lepaskan: 2024-12-15 07:29:13
asal
538 orang telah melayarinya

Why Does Using a Reference in a PHP Foreach Loop Lead to Repeated Element Values?

Mengapa Nilai Elemen Diulang dalam Tatasusunan Apabila Menggunakan Rujukan Di Dalam Foreach?

Pertimbangkan kod PHP berikut:

$a = array('a', 'b', 'c', 'd');

foreach ($a as &$v) { }
foreach ($a as $v) { }

print_r($a);
Salin selepas log masuk

Anehnya, output mendedahkan bahawa nilai elemen terakhir telah menimpa nilai-nilai yang lain elemen, menghasilkan:

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => c
)
Salin selepas log masuk

Menjelaskan Keanehan

Tingkah laku ini ialah aspek PHP yang didokumenkan yang berpunca daripada penggunaan rujukan (&) dalam gelung foreach pertama.

Semasa gelung pertama, setiap elemen tatasusunan ditugaskan kepada $v melalui rujukan. Apabila $v diubah suai, ia menukar elemen yang dirujuk dalam tatasusunan asal. Jadi, apabila $v ditugaskan semula dalam gelung berikutnya, ia secara tidak sengaja mengubah elemen tatasusunan yang sepadan dengan rujukan.

Penyelesaian

Untuk mengelakkan isu ini, nyahset secara eksplisit merujuk kepada elemen terakhir sebelum foreach kedua gelung:

foreach ($a as &$v) { }
unset($v);
foreach ($a as $v) { }

print_r($a);
Salin selepas log masuk

Memahami Proses Langkah demi Langkah

Berikut ialah penjelasan langkah demi langkah tentang perkara yang berlaku dalam kod:

  • Pertama kali gelung:

    • Lelaran 1: $v ialah rujukan kepada $a[0] ('a')
    • Lelaran 2: $v ialah rujukan kepada $a[1] ('b')
    • Lelaran 3: $v ialah rujukan kepada $a[2] ('c')
    • Lelaran 4: $v ialah rujukan kepada $a[3] ('d')
  • Di penghujung gelung pertama, $v masih merujuk kepada $a[3] ('d').
  • Foreach kedua gelung:

    • Lelaran 1: $v kekal sebagai rujukan kepada $a[3], tetapi nilainya ditetapkan kepada $a[0] ('a'). Ini menukar $a[3] kepada 'a'.
    • Lelaran 2-4: Lelaran seterusnya mengulangi proses ini, menimpa $a[3] dengan nilai $a[1] ('b'), $a[2] ('c'), dan akhirnya, $a[3] ('c').

Atas ialah kandungan terperinci Mengapa Menggunakan Rujukan dalam Gelung Foreach PHP Membawa kepada Nilai Elemen Berulang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan