Rumah >pembangunan bahagian belakang >tutorial php >Mengapa Gelung Foreach PHP dengan Rujukan Mengganti Elemen Tatasusunan Terakhir?
Gelagat Foreach yang Tidak Dijangka Menggunakan Rujukan
Apabila menggunakan gelung foreach PHP dengan rujukan, tingkah laku aneh boleh berlaku seperti yang ditunjukkan oleh coretan kod berikut :
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
Kod ini bertujuan untuk berulang melalui tatasusunan $a menggunakan pembolehubah rujukan $v dalam gelung pertama dan pembolehubah bukan rujukan $v dalam gelung kedua. Walau bagaimanapun, yang menghairankan, output menunjukkan bahawa elemen terakhir tatasusunan, 'd', telah ditimpa:
Array ( [0] => a [1] => b [2] => c [3] => c )
Penjelasan Perilaku
Ini yang tidak dijangka tingkah laku didokumentasikan dengan baik dalam dokumentasi PHP. Ia memberi amaran bahawa apabila menggunakan rujukan dalam gelung foreach, rujukan elemen terakhir tatasusunan kekal walaupun selepas gelung telah tamat. Untuk mengelakkan isu ini, adalah disyorkan untuk menyahset pembolehubah rujukan menggunakan unset().
Dalam contoh kami, pembolehubah rujukan $v kekal sebagai rujukan kepada elemen terakhir $a selepas gelung pertama. Apabila gelung kedua berulang melebihi $a, setiap lelaran gelung menetapkan semula nilai kepada $v. Walau bagaimanapun, memandangkan $v ialah rujukan kepada elemen terakhir $a, ia menimpa nilai elemen tersebut.
Panduan Langkah demi Langkah untuk Tingkah Laku
Untuk menjelaskan lebih lanjut, berikut ialah panduan langkah demi langkah tentang perkara yang berlaku dalam kod kami coretan:
Penyelesaian
Untuk mengelakkan isu ini, cuma nyahset pembolehubah rujukan $v selepas gelung pertama:
foreach ($a as &$v) { } unset($v); foreach ($a as $v) { }
Atas ialah kandungan terperinci Mengapa Gelung Foreach PHP dengan Rujukan Mengganti Elemen Tatasusunan Terakhir?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!