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

WBOY
發布: 2023-03-01 20:46:01
原創
1018 人瀏覽過

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

對一個數組進行兩次循環,第一次通過引用傳值,改變了數組元素的值,第二次任然用$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。

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!