php 7

时间:2017-06-27 02:39:18

标签: 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但不适用于php7:

我为数组中的每个项目收到此错误:

  

注意:未定义的索引:。 resultObj] [结果。在/ srv / users /...

我试着用它解决这个问题:

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

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

我收到此错误:

  

注意:使用未定义的常量resultObj - 假设'resultObj'   / SRV /用途

1 个答案:

答案 0 :(得分: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);
}