如此,可方便直接對值修改:
foreach ($arr as &$v){
$v = $v*10;
}
.....
但這樣使用時須注意,最後須記得將 reference 變數 unset,
避免 reference 變數仍指到陣列的元素,不注意時,可能造成非預期的修改。
$arr = array("A", "B", "C");
foreach ($arr as &$v){
}
var_dump($arr);
foreach ($arr as $key => $v) {
echo "{$key} => {$v}\n";
var_dump($arr);
}
輸出結果,可發現第2次的freach,最後一個元素一直改變,因為 reference 變數 $v 還一直代表著陣列最後一個元素,所以一直被重新賦值。
array(3) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[2]=>
&string(1) "C"
}
0 => A
array(3) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[2]=>
&string(1) "A"
}
1 => B
array(3) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[2]=>
&string(1) "B"
}
2 => B
array(3) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[2]=>
&string(1) "B"
}
使用完馬上unset(&$v),可避免非預期的最後一個元素值一直改變
$arr = array("A", "B", "C");
foreach ($arr as &$v){
}
unset($v);
var_dump($arr);
foreach ($arr as $key => $v) {
echo "{$key} => {$v}\n";
var_dump($arr);
}
輸出結果
array(3) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[2]=>
string(1) "C"
}
0 => A
array(3) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[2]=>
string(1) "C"
}
1 => B
array(3) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[2]=>
string(1) "C"
}
2 => C
array(3) {
[0]=>
string(1) "A"
[1]=>
string(1) "B"
[2]=>
string(1) "C"
}
參考:
PHP: foreach - Manual
沒有留言:
張貼留言