首頁  >  文章  >  後端開發  >  有關循環的時候引用傳值的問題

有關循環的時候引用傳值的問題

WBOY
WBOY原創
2016-12-01 00:56:201007瀏覽

有關循環的時候引用傳值的問題

對一個數組進行兩次循環,第一次通過引用傳值,改變了數組元素的值,第二次任然用$k,$v,為什麼在沒有用引用的情況下改變了數組最後一個元素的值?而且前面幾個元素都沒變,就變了最後一個?

<code><?php
$arr = array(1,2,3,4,5);
foreach ($arr as $k => &$v) {
    switch ($v) {
        case '1':
            $v = 'a';
            break;
        case '2':
            $v = 'b';
            break;
        case '3':
            $v = 'c';
            break;
        case '4':
            $v = 'd';
            break;
        case '5':
            $v = 'e';
            break;
        
        default:
            # code...
            break;
    }
}
var_dump($v);
var_dump($arr);
foreach ($arr as $k => $v) {
    var_dump($v);
}
var_dump($arr);</code>

回覆內容:

有關循環的時候引用傳值的問題

對一個數組進行兩次循環,第一次通過引用傳值,改變了數組元素的值,第二次任然用$k,$v,為什麼在沒有用引用的情況下改變了數組最後一個元素的值?而且前面幾個元素都沒變,就變了最後一個?

<code><?php
$arr = array(1,2,3,4,5);
foreach ($arr as $k => &$v) {
    switch ($v) {
        case '1':
            $v = 'a';
            break;
        case '2':
            $v = 'b';
            break;
        case '3':
            $v = 'c';
            break;
        case '4':
            $v = 'd';
            break;
        case '5':
            $v = 'e';
            break;
        
        default:
            # code...
            break;
    }
}
var_dump($v);
var_dump($arr);
foreach ($arr as $k => $v) {
    var_dump($v);
}
var_dump($arr);</code>

<code>$arr = array(1,2,3,4,5);
foreach ($arr as $k => &$v) {
    switch ($v) {
        case '1':
            $v = 'a';
            break;
        case '2':
            $v = 'b';
            break;
        case '3':
            $v = 'c';
            break;
        case '4':
            $v = 'd';
            break;
        case '5':
            $v = 'e';
            break;
        
        default:
            # code...
            break;
    }
}
var_dump($v);
var_dump($arr);
unset($v);//foreach 使用引用时在处理完后立即断开引用关系,或则把下面的$v=>$va
foreach ($arr as $k => $v) {
    var_dump($v);
}
var_dump($arr);

</code>

第一次循環完 $v = e;//這邊還是引用關係&$arr['e'];

第二次循環倒數第二步將 &$v = $arr['d'];然後 &$arr['e'] = &$v = $arr['d'];

這個是PHP的引用的經典坑。

解決方法: 在第一個foreach後面加個unset($v);即可。

原理略,可以自行google/baidu。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn