$LEVELS = array();
function addLevel() {
$LEVELS[1] = "test";
}
var_dump($LEVELS);
它打印
array(0) {
}
这让我很恼火。有什么帮助吗?
$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);
您需要首先调用您的函数以使其代码执行任何操作(并且您的代码中只有函数体 - 这并不意味着它将被执行)。你似乎没有这样做。但即使你解决了这个问题,它仍然无法工作,因为你正在处理函数范围内的变量(也就是局部变量)。您的函数中没有 $LEVELS 数组,内部不可见另一个数组。因此,您的行$LEVELS[1] = "Test";
只需创建在功能范围内可见的新数组。
要解决您的问题,您应该通过引用将数组传递给函数:
function addLevel( &$myArray ) {
$myArray[1] = "test";
}
然后传递你的数组:
addLevel( $LEVELS );
你也可以使用global
,但这是错误的,所以不要这样做。
如果您不想访问 $LEVEL 变量,请在函数中使用“全局”。
$LEVELS = array();
function addLevel() {
global $LEVELS;
$LEVELS[1] = "test";
}
addLevel();
var_dump($LEVELS);
这是一个变量范围问题。
您需要将变量作为参数传递:
// 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);
为了清楚起见并尽可能保持全局变量空间为空,通常首选第一个示例(作为参数传递)。