php引用传参 - php函数引用传参数组:function set(array &$array, $path, $value)
PHPz
PHPz 2017-04-10 15:30:16
[PHP讨论组]
function set(array &$array, $path, $value)
{
    print_r($array);
    echo('

'); $segments = explode('.', $path); while(count($segments) > 1) { $segment = array_shift($segments); if(!isset($array[$segment]) || !is_array($array[$segment])) { $array[$segment] = []; } $array =& $array[$segment]; print_r($array); echo('

'); } $array[array_shift($segments)] = $value; print_r($array); echo('

'); } $arr = ['a' => 1, 'b' => 2, 'c' => 3]; set($arr, 'a.b.d', 4); print_r($arr);

结果:

Array ( [a] => 1 [b] => 2 [c] => 3 )

Array ( )

Array ( )

Array ( [d] => 4 )

Array ( [a] => Array ( [b] => Array ( [d] => 4 ) ) [b] => 2 [c] => 3 )

为什么最终结果不是Array ( [d] => 4 ),而是 Array ( [a] => Array ( [b] => Array ( [d] => 4 ) ) [b] => 2 [c] => 3 ) ?
这个怎么解: $array =& $array[$segment];

PHPz
PHPz

学习是最好的投资!

全部回复(1)
迷茫

问题主要出现在

 while(count($segments) > 1)
    {
        $segment = array_shift($segments);

        if(!isset($array[$segment]) || !is_array($array[$segment]))
        {
            $array[$segment] = [];
        }
        //这里传引用赋值,将$array[$segment]的引用传给了$array
        //所以此后的$array已经不再指向传参近来的那个$array(但传参进来的那个$array并未消失)
        //最简单的方法是将这个&去掉,在输出一遍,你应该就明白了
        $array =& $array[$segment];

        print_r($array);
        echo('<br><hr>');
    }

运行一下,如果不明白有问题可以留言

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号