我想从文件中将变量作为字符串加载,并在以后进行比较
文件结构: 变量名;结果
例如
$arr['x'];5
$a;53
$b - $a;27
我加载了该文件(有效),并在分割为$ x后分配了第一项,例如
$x = "$arr['x']";
解析错误:语法错误,意外的''(T_ENCAPSED_AND_WHITESPACE),期望为“-”或标识符(T_STRING)或变量(T_VARIABLE)或数字(T_NUM_STRING)
$result = 5; // 2nd item of split - loaded from file line (ok)
然后比较
if ($result == $x)
{
echo "ok";
}
还是不能这样做? PS:最小的示例-这就是为什么我删除了文件加载并拆分的原因
答案 0 :(得分:1)
由于变量中包含表达式,因此您将需要编写表达式解析器或使用eval
。这样可以使其与eval
一起使用:
$vars = array("\$arr['x'];5", "\$a;53", "\$b - \$a;27");
$arr['x'] = 5;
$a = 54;
$b = 81;
foreach ($vars as $var) {
list($x, $result) = explode(';', $var);
if (eval("return $result == $x;")) {
echo "$x = $result\n";
}
else {
echo "$x != $result\n";
}
}
输出
$arr['x'] = 5
$a != 53
$b - $a = 27
答案 1 :(得分:0)
为什么要用这样的双引号括住$arr['x']
$x = "$arr['x']";
从该语句中删除引号,并使它像这样
$x = $arr['x'];