1
$LEVELS = array();

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

var_dump($LEVELS);

它打印

array(0) {
}

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

4

4 回答 4

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);
于 2012-09-15T15:59:35.620 回答
1

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

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

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

然后传递你的数组:

addLevel( $LEVELS );

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

于 2012-09-15T15:59:12.570 回答
1

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

$LEVELS = array();
function addLevel() {
    global $LEVELS;
    $LEVELS[1] = "test";
}
addLevel();
var_dump($LEVELS);
于 2012-09-15T15:59:26.693 回答
1

这是一个变量范围问题。

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

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

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

于 2012-09-15T15:59:30.940 回答