PHP7的验证eval()

PHP7的验证eval(),php,eval,Php,Eval,原始代码如下: $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中起作用,但在php

原始代码如下:

$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中不起作用:

对于数组中的每个项目,我都遇到了以下错误:

注意:未定义的索引:。resultObj][result.in/srv/users/

我试着用这个来修复它:

$value = $val['value'];
$implode = implode($hash_stack, "][");
eval("\$ret[" . $implode . "] = '{$value}';");
array_pop($hash_stack);
但还是有错误,我做错了什么

我得到这个错误:

注意:在中使用未定义的常量resultObj-假定为'resultObj' /srv/使用


您之所以会遇到这个错误,是因为您的数组键是纯代码而不是字符串。您必须对它们进行转义和引用,但是……老实说,我会完全去掉
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);
}