2017-09-06 1 views
0

Je suis confus par la référence de PHP. S'il vous plaît jeter un oeil à mon exemple dépouillé:Impossible de modifier les données source à travers la référence renvoyée par la fonction sur 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"} 

Maintenant, tout est ok. Mais je voudrais définir une fonction pour obtenir la référence interne.

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

Pourquoi? Et comment le résoudre? En fait, $ a est une arborescence imbriquée, j'ai donc besoin de définir une fonction pour obtenir des données à un certain niveau et les modifier.

+0

appeler une fonction par référence, ont mis à jour ma réponse ci-dessous .. – Dru

Répondre

1

Vous devriez faire ceci:

$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

Aha, je dois utiliser « & » trois fois dans mon cas. Un dans les paramètres, un dans le nom de la fonction, et un dans l'appel. Je vous remercie. – Does