无法通过PHP上的函数返回的引用来修改源数据

I'm confused by the reference of PHP. Please take a look at my stripped down example:

$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"}

Now, everything is ok. But I would like define a function to get the inner reference.

$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];
}

Why? And how to resolve it? In fact, $a is a nested tree data, so I need to define a function to get some data on some level and to modify it.

You should do this:

$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];
}