2011-01-29 18 views
2

を使用して配列の値をグローバルに変更すると、配列内の特定の値を変更する関数を呼び出す必要があります。 しかし、私が書いたコードからは、その値は関数内でのみ変更され、全体的にそのまま残っています。 私は何か魔法を見逃してしまったのだろうか?何らかの理由で、関数

<?php 
$test=array(0=>"a",1=>"b"); 

function myTest(){ 
$test[0]="c"; 
print_r ($test); 
} 

myTest(); 
print_r($test); 
?> 

理想的には、出力がなければならない、 アレイ([0] => C [1] => B) アレイ([0] => C [1] => B)

(0)=> a [1] => b) 配列の値を変更できませんでした。配列[1]を次のように失っています。よくそれは非常に落胆練習(search Stack Overflow to find out why)である、あなたは簡単に(となまけ)globalキーワードを使用することができますが、それを動作させるために

function myTest(){ 
    global $test; 
    $test[0]="c"; 
    print_r ($test); 
} 

答えて

2

あなたはglobalキーワードを使用する機能します。あなたは、参照として配列を受け入れることができ、また

Array (
    [0] => c 
    [1] => b 
) 

$test = array("a","b"); 

function myTest(array $test) { 
    $test[0] = "c"; 
} 

$test = myTest($test); 
print_r($test); 

がレンダリングされます:

代わりに、あなたの関数は、引数として配列を受け入れ、結果として修正された配列を返す必要があります(返品と再割当てをせずに)直接作業してください。

$test = array("a","b"); 

function myTest(array &$test) { 
    $test[0] = "c"; 
} 

myTest($test); 
print_r($test); 

両方の例で出力が同じになります。

1

:あなたが持っている必要があります