Gelagat Rujukan dalam Gelung 'foreach': Memahami Pengubahsuaian Tatasusunan
Dalam PHP, menggunakan rujukan dalam gelung 'foreach' boleh membawa kepada perkara yang tidak dijangka pengubahsuaian tatasusunan. Tingkah laku ini diserlahkan dalam kod berikut:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
Output yang dihasilkan oleh kod ini adalah tidak dijangka:
Array ( [0] => a [1] => b [2] => c [3] => c )
Penjelasan Langkah demi Langkah
Untuk memahami tingkah laku ini, adalah penting untuk mengikuti perubahan yang berlaku semasa setiap lelaran 'foreach' gelung:
Setelah selesai gelung 'foreach' pertama (lelaran rujukan), $v masih memegang rujukan kepada $a[3] ('d').
Oleh itu, selepas gelung 'foreach' kedua (lelaran nilai), tatasusunan $a telah diubah suai dengan 'c' muncul dua kali.
Menyelesaikan Isu
Untuk mengelakkan tingkah laku yang tidak dijangka ini, adalah disyorkan untuk menyahset rujukan selepas setiap lelaran :
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
Ini akan menghasilkan output yang dijangkakan:
Array ( [0] => a [1] => b [2] => c [3] => d )
Atas ialah kandungan terperinci Mengapakah Menggunakan Rujukan dalam Gelung `foreach` PHP Membawa kepada Pengubahsuaian Tatasusunan Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!