原始代码是:
$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 /用途
答案 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);
}