2017-09-06 14 views
0

PHPのリファレンスで混乱します。私の解体した例を見てください:PHPの関数から返された参照によってソースデータを変更できません

$a = array("level1"=>array("level2"=>"level3"));//a nested array 
$b = &$a["level1"];//get the inner reference 
$b["key"] = "test";//modify some data 

echo json_encode($a)."<br>";//output {"level1":{"level2":"level3","key":"test"}} 
echo json_encode($b)."<br>";//output {"level2":"level3","key":"test"} 

今、すべては問題ありません。しかし、内部参照を取得する関数を定義したいと思います。

$a = array("level1"=>array("level2"=>"level3"));//a nested array 
//$b = &$a["level1"];//get the inner reference 
$b = getInnerRefer($a, "level1"); 
$b["key"] = "test";//modify some data 

echo json_encode($a)."<br>";//output {"level1":{"level2":"level3"}} 
echo json_encode($b)."<br>";//output {"level2":"level3","key":"test"} 

function getInnerRefer(&$father, $key){ 
    return $father[$key]; 
} 

なぜですか?そしてそれを解決する方法は?実際、$ aはネストされたツリーデータなので、あるレベルのデータを取得して変更する関数を定義する必要があります。

+0

通話機能を参照することにより、以下の私の答え.. – Dru

答えて

1

あなたがこれを行う必要があります。

$a = array("level1"=>array("level2"=>"level3"));//a nested array 
//$b = &$a["level1"];//get the inner reference 
$b = &getInnerRefer($a, "level1"); 
$b["key"] = "test";//modify some data 

echo json_encode($a)."<br>"; 
echo json_encode($b)."<br>"; 

function &getInnerRefer(&$father, $key){ 

    return $father[$key]; 
} 
+0

アハを更新しました、私は私の場合には「&」3回使用する必要があります。 1つはパラメータ、1つは関数名、もう1つはコールです。ありがとうございました。 – Does

関連する問題