无法使用函数更新数组?

时间:2012-09-15 15:57:21

标签: php arrays function

$LEVELS = array();

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

var_dump($LEVELS);

打印

array(0) {
}

这让我烦恼不已。有什么帮助吗?

4 个答案:

答案 0 :(得分:6)

$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);

答案 1 :(得分:1)

你需要先调用你的函数让它的代码做任何事情(你的代码中只有函数体 - 它并不意味着它会被执行)。你好像不这样做。但即使你解决这个问题,它仍然无法工作,因为你正在处理函数的范围中的变量(也就是局部变量)。你的函数中有NO $ LEVELS数组,而不是内部可见的另一个数组。因此,您的行$LEVELS[1] = "Test";只需即可在函数范围内创建新数组

要解决您的问题,您应该将数组传递给参考

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

然后传递你的数组:

addLevel( $LEVELS );

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

这是一个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); 

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