2017-06-27 59 views
0

原始代码是这样的:验证的eval()用于PHP 7

$hash_stack = array(); 
foreach ($values as $key => $val) 
{ 
    array_push($hash_stack, $val['tag']);    
    eval("\$ret[" . implode($hash_stack, "][") . "] = '{$val[value]}';"); 
    array_pop($hash_stack); 
} 

它工作在PHP5但不是在PHP7:

我在阵列这个错误每个项目:

Notice: Undefined index: . resultObj][result . in /srv/users/...

我试图与此修复:

$value = $val['value']; 
$implode = implode($hash_stack, "]["); 
eval("\$ret[" . $implode . "] = '{$value}';"); 
array_pop($hash_stack); 

但它仍然出现错误。我究竟做错了什么?

我得到这个错误:

Notice: Use of undefined constant resultObj - assumed 'resultObj' in /srv/use

回答

1

,因为你的数组键是普通的代码,而不是字符串你得到错误。你必须逃避并引用他们,但是......说实话,我完全摆脱了eval

你应该能够做同样的事情用一个参考:

$hash_stack = array(); 
foreach ($values as $key => $val) 
{ 
    array_push($hash_stack, $val['tag']); 

    $r = &$ret; 
    foreach ($hash_stack as $h) 
    { 
     $r = &$r[$h]; 
    } 
    $r = $val['value']; 

    array_pop($hash_stack); 
}