2013-06-11 3 views
0

재귀 배열의 값을 변경하고 싶습니다.재귀 배열의 내부 값 변경

$scopePath 변경 경로를 나타냄

한 배열 변경 변수에 path을 제공한다. 예를 if $scopePath==Array("owners","products","categories")

를 들어

및 $ 태그 = "가격";

'나는 문제 때문에 라인 $ U = $ U [$의]이 $ U에 대한 참조를 변경하기 때문에입니다 알고 $value["owners"]["products"]["categories"]["tag"]

$u=$value; 
    foreach ($scopePath as $i => $s) { 
     if (!isset($u[$s])) 
      $u[$s]=Array(); 
     $u=$u[$s]; 
    } 
    $u[$tag]=true; 

true에 변경하려면,하지만 난 돈 그것을 고치는 법을 알지 못한다.

+0

코드는 실제로 잘 보이는 때. 의도 한대로 작동하지 않는 것은 무엇입니까? –

+0

줄'$ u = $ u [$ s];'는'$ u'의 참조를 변경하게합니다. '$ value' 변수는 변경되지 않습니다. – edi9999

+0

[당신이 이것을 찾고 있다고 생각합니다] (https://eval.in/33329). –

답변

1

$u$value 또는 $value 내부 요소를 참조하십시오.

$u = &$value; 
foreach($scopePath as $i => $s) { 
    if (!isset($u[$s])) 
     $u[$s]=Array(); 
    $u = &$u[$s]; 
} 
$u["tag"] = true; 

$scopePath = array("owners","products","categories")

print_r($value); 

출력됩니다

Array 
(
    [owners] => Array 
     (
      [products] => Array 
       (
        [categories] => Array 
         (
          [tag] => 1 
         ) 
       ) 
     ) 
) 
1

당신이 첫 번째 줄에 &를 사용해야합니다 $value 변수를 변경하려면 :

$u = &$value;