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
DDDasal
2024-12-15 07:29:13539semak imbas

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);

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

Array
(
    [0] => a
    [1] => b
    [2] => c
    [3] => c
)

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);

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!

Kenyataan:
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