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:
Foreach kedua gelung:
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!