【问题标题】:Can't update array with function?不能用函数更新数组?
【发布时间】:2012-09-15 15:57:21
【问题描述】:
$LEVELS = array();

function addLevel() {
    $LEVELS[1] = "test";
}

var_dump($LEVELS);

打印出来

array(0) {
}

这让我很恼火。有什么帮助吗?

【问题讨论】:

  • 你在代码中调用了函数addLevel?
  • @yoda - 不要宣传不良做法,全局不是最好的答案...改为作为函数参数传递,并通过引用传递或使用返回

标签: php arrays function


【解决方案1】:
$LEVELS = array();

function addLevel() {
    global $LEVELS;
    $LEVELS[1] = "test";
}


addLevel(); // CALL YOUR FUNCTION
var_dump($LEVELS);

也就是说,这是一个更好的方法:

$LEVELS = array();

function addLevel(&$LEVELS) { // This is a pass by reference -- points to the same array
    $LEVELS[1] = "test";
}


addLevel($LEVELS); // CALL YOUR FUNCTION
var_dump($LEVELS);

或者...

$LEVELS = array();

function addLevel($LEVELS) { // THis gets a copy of the array
    $LEVELS[1] = "test";
    return $LEVELS;          //and send it back
}


$LEVELS = addLevel($LEVELS); // CALL YOUR FUNCTION
var_dump($LEVELS);

【讨论】:

    【解决方案2】:

    如果您不想访问 $LEVEL 变量,请在函数中使用“全局”。

    $LEVELS = array();
    function addLevel() {
        global $LEVELS;
        $LEVELS[1] = "test";
    }
    addLevel();
    var_dump($LEVELS);
    

    【讨论】:

    • 还有一件事,addLevel() 应该在 var_dump 之前调用
    【解决方案3】:

    这是一个variable scope 问题。

    您需要将变量作为参数传入:

    // declare array in global scope
    $LEVELS = array(); 
    // define function that takes array as parameter     
    function addLevel($LEVELS) { 
        $LEVELS[1] = "test";
        return $LEVELS;
    }
    // execute function, pass array to function scope using parameter
    $LEVELS = addLevel($LEVELS);
    // show contents
    var_dump($LEVELS); 
    

    或者将其声明为全局变量:

    // declare array in global scope
    $LEVELS = array(); 
    // define function
    function addLevel() { 
        // import array from global scope
        global $LEVELS;
        $LEVELS[1] = "test"; 
    }
    // execute function
    addLevel();
    // show contents
    var_dump($LEVELS); 
    

    为了清楚起见并尽可能保持全局变量空间为空,通常首选第一个示例(作为参数传递)。

    【讨论】:

      【解决方案4】:

      您需要首先调用您的函数以使其代码执行任何操作(并且您的代码中的某处只有函数体 - 这并不意味着它将被执行)。你似乎没有这样做。但即使你解决了这个问题,它仍然无法工作,因为你要处理函数作用域中的变量(又名局部变量)。您的函数中没有 $LEVELS 数组,内部不可见另一个数组。所以你的$LEVELS[1] = "Test"; 行只是创建新数组在函数范围内可见。

      要解决您的问题,您应该将数组传递给函数通过引用

      function addLevel( &$myArray ) {
        $myArray[1] = "test";
      }
      

      然后传递你的数组:

      addLevel( $LEVELS );
      

      您也可以使用global,但这是错误,所以不要这样做。

      【讨论】:

        猜你喜欢
        • 2023-04-04
        • 1970-01-01
        • 1970-01-01
        • 2017-10-29
        • 2014-10-23
        • 2016-11-03
        • 2019-12-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多