2014-06-11 2 views
0

내 코드에서 eval()을 제거하려고합니다.eval()이 아닌 배열의 동적 분기에 할당

현재 I가 사용

eval("$mkt_data" . $branch . " = $xyz"); 

$xyz를 할당 (다차원 배열도이다) $mkt_data 특정 브랜치.

$branch can be 1, 2 or 3 levels deep, i.e. 
$branch = "['mkt1']['offer']['bid']"; 
or 
$branch = "['status']"; 

이 할 수있는 똑똑한 방법은 무엇입니까?

+0

평가의 문제점은 무엇입니까()? –

+0

'$ {$ mkt_data. $ branch} = $ xyz;'는 좋은 생각입니까? – Zerquix18

답변

0

당신은이 같은 기능을 사용할 수 있습니다 :

function set(&$ary, $keys, $value) { 
    $last = array_pop($keys); 
    foreach($keys as $k) { 
     if(!isset($ary[$k])) 
      $ary[$k] = array(); 
     $ary = &$ary[$k]; 
    } 
    $ary[$last] = $value; 
} 

예 :

$data = array(); 
set($data, array('foo', 'bar', 'baz'), 42); 
print_r($data); 

결과 :

Array 
(
    [foo] => Array 
    (
     [bar] => Array 
     (
      [baz] => 42 
     ) 

    ) 

)