$LEVELS = array();
function addLevel() {
$LEVELS[1] = "test";
}
var_dump($LEVELS);
打印
array(0) {
}
这让我烦恼不已。有什么帮助吗?
答案 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);
为了清楚起见并保持全局变量空间尽可能为空,通常首选第一个示例(作为参数传递)。