2016-08-10 8 views
1

関数内に名前付きkey=>valueペアを追加しようとするPHPコードがあります。それはちょうど書かれているとき、ストレートコード(。character_nameとcharacter_colorが正常に動作し、ファイル内の既存の機能であり、彼らが行うすべての既存のデータから文字列を引っ張っている)ように、それは正常に動作します:関数内の名前付きキーが機能しない

$name = character_name($character_id); 
$color = character_color($character_id); 
$array = array("character"=>$name, "color"=>$color); 
$characters_array['character']=$array; 

しかし、私はそれをラップしようとすると、関数内で変数キー値に名前を付け、それはもはや、NULL値で動作し、生成します。

function character_array($key,$character_id) { 
    $name = character_name($character_id); 
    $color = character_color($character_id); 
    $array = array("character"=>$name, "color"=>$color); 
    $GLOBALS["characters_array"][$key]=$array; 
} 

を私は私の問題は、関数の最後の行であることを知っていない、と私は二組と思われます角括弧が問題ですが、わからないのは、最終行を正しく書き込んで、名前を付け加えることです。key=>valueのペアをグローバル配列に追加します。どこが間違っていますか?機能

function character_array($key,$character_id) { 
    global $characters_array; 
    $name = character_name($character_id); 
    $color = character_color($character_id); 
    $array = array("character"=>$name, "color"=>$color); 
    $characters_array[$key]=$array; 
} 

答えて

0

内のグローバル変数の参照を取得することにより、と

0

てみてくださいあなたはこの作業を取得するカップルのオプションがありますが、私はグローバルに頼る避けるだろう。

私の意見では、関数が期待するデータを返すようにして、必要な場所に割り当てることをお勧めします。

function character_array($key,$character_id) { 
    $name = character_name($character_id); 
    $color = character_color($character_id); 
    $array = array("character"=>$name, "color"=>$color); 
    return $array; 
} 

//Assign it to the array by calling the function. 
$GLOBALS["characters_array"] = character_array("foo", "bar"); 

もう1つのオプションは、everthingをパラメータとして渡すことです。これは、暗黙のうちに上記print_rは、まだデータが表示されないことを必要と

$GLOBALS["characters_array"]=[]; 

function character_array($key,$character_id, $characters_array) { 
    $name = character_name($character_id); 
    $color = character_color($character_id); 
    $array = array("character"=>$name, "color"=>$color); 
    $characters_array[$key]=$array; 
} 

character_array("foo", "bar", $GLOBALS["characters_array"]); 

//This will still show nothing though 
print_r($GLOBALS["characters_array"]); 

お知らせかのようにデータを割り当てます。これは、配列をPHPで渡すときに、値渡し(つまり、関数内でそのコピーを作成し、その関数スコープを終了するときにPHPを破棄するため)です。

関数に配列をとり、それに何かをさせるためには、参照渡しが必要です。これは、変数の前に&を追加する必要がある関数シグネチャでは簡単です。

//Notice the & infront of $characters_array 
function character_array($key,$character_id, &$characters_array) { 
    //code from above 
} 
関連する問題