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);
}