Melalui Rujukan dalam foreach: Memahami Gelagat Tidak Dijangka
Gelung foreach PHP berulang ke atas setiap elemen dalam tatasusunan, tetapi dalam beberapa kes , outputnya boleh mengejutkan. Pertimbangkan kod berikut:
$a = ['zero', 'one', 'two', 'three']; foreach ($a as &$v) { } foreach ($a as $v) { echo $v . PHP_EOL; }
Dijangkakan, output hendaklah 'sifar', 'satu', 'dua' dan 'tiga'. Walau bagaimanapun, jika anda menjalankan kod ini, anda akan mendapat 'sifar', 'satu', 'dua', 'dua' sebaliknya.
Tingkah laku yang tidak dijangka ini berpunca daripada konsep pembolehubah PHP melalui rujukan. Dalam gelung foreach pertama, kami menggunakan operator rujukan "&" untuk mencipta pembolehubah rujukan ($v) kepada setiap elemen dalam tatasusunan $a. Ini bermakna sebarang perubahan yang dibuat kepada $v juga akan mempengaruhi elemen yang sepadan dalam $a.
Pada mulanya, semua elemen dalam $a adalah pembolehubah biasa. Walau bagaimanapun, selepas gelung pertama, hanya $a[3] kekal sebagai pembolehubah rujukan. Ini kerana semasa melelaran melalui tatasusunan, pembolehubah rujukan sebelumnya ($v) ditimpa dengan setiap elemen baharu.
Dalam gelung kedua, apabila kita menggemakan $v, ia menunjuk kepada $a[3], yang ditetapkan kepada 'dua' dalam lelaran sebelumnya. Oleh itu, 'dua' digemakan dan bukannya 'tiga' dalam lelaran terakhir.
Dengan memahami perbezaan antara pembolehubah normal dan pembolehubah rujukan, dan cara ia berinteraksi dalam gelung foreach, kita boleh mengelakkan tingkah laku yang tidak dijangka dan pastikan kod kami beroperasi seperti yang dimaksudkan.
Atas ialah kandungan terperinci Mengapa Gelung `foreach` PHP Saya Menghasilkan Keputusan Yang Tidak Dijangka Apabila Menggunakan Rujukan Laluan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!