【问题标题】:PHP Pass By Refernce logic explanation [duplicate]PHP Pass By Reference 逻辑解释 [重复]
【发布时间】:2014-03-31 14:20:52
【问题描述】:

谁能解释一下以下 PHP 脚本的输出:

        $a = array ('zero','one','two');

        foreach ($a as &$v) {
        }

        foreach ($a as $v) {
        }            

        print_r($a);

输出:

数组 ( [0] => 零 [1] => 一 [2] => 一 )

【问题讨论】:

  • 希望对您(现已删除)问题的一系列反对意见具有指导意义。散漫的问题被认为是题外话,如果你对上层的人很敏锐,你会得到更多的反对票。请在这个社区保持文明!

标签: php arrays pass-by-reference


【解决方案1】:

不是真正的答案,但它可以帮助您了解发生了什么。

<?php

$a = array ('zero','one','two');

foreach ($a as &$v) {
}

print_r($v); // two

$v = "four";

print_r($a);
// Array
// (
//     [0] => zero
//     [1] => one
//     [2] => four
// )

【讨论】:

    【解决方案2】:

    通过引用传递,可以在循环内或循环外改变值。

    <?php
            $a = array ('zero','one','two');
            foreach ($a as &$v) {
            }
    
            // before loop $v is reference to last item in array $a
            // if you perform unset($v) before this loop, nothing will change in $a
            foreach ($a as $v) {
                // here you assigning $v values from this array in loop 
            }            
    
            print_r($a);
    // Array
    // (
    //     [0] => zero
    //     [1] => one
    //     [2] => one
    // )
    

    【讨论】:

    • 当 $v 引用数组 $a 中的最后一项时,即它等于 2 那么为什么在第二个循环后最后一项变为 1
    猜你喜欢
    • 2015-10-22
    • 2016-11-15
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 2012-02-16
    相关资源
    最近更新 更多