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 変数にアクセスしたくない場合は、関数で "global" を使用します。

$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 に答える