$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 変数にアクセスしたくない場合は、関数で "global" を使用します。
$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);
明確にするため、およびグローバル変数スペースをできるだけ空に保つために、通常は最初の例 (パラメーターとして渡す) が優先されます。