การใช้ลิงก์ใน foreach ใน PHP
เมื่อทำงานกับลูป foreach
การเปลี่ยนแปลงตัวแปรสำหรับองค์ประกอบ
จะไม่นำไปสู่การเปลี่ยนแปลงในอาร์เรย์เอง:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
$elem++;
}
var_dump($arr); // จะไม่เปลี่ยนแปลง
?>
อย่างไรก็ตาม สามารถบรรลุผลลัพธ์ที่ต้องการได้ หากประกาศตัวแปรสำหรับองค์ประกอบ เป็นลิงก์ ในกรณีนี้ การเปลี่ยนแปลง ของตัวแปรนี้จะนำไปสู่ การเปลี่ยนแปลงในอาร์เรย์:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as &$elem) {
$elem++;
}
var_dump($arr); // จะเปลี่ยนแปลง
?>
แก้ไขโค้ดต่อไปนี้ ให้ทำงานได้ตาม ที่ตั้งใจไว้:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as &$elem) {
$elem = sqrt($elem);
}
var_dump($arr);
?>
แก้ไขโค้ดต่อไปนี้ ให้ทำงานได้ตาม ที่ตั้งใจไว้:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as &$elem) {
$elem ** 2;
}
var_dump($arr);
?>