将变量名称和结果保存到字符串中,进行拆分和比较-但不起作用

时间:2018-10-30 22:22:41

标签: php

我想从文件中将变量作为字符串加载,并在以后进行比较

文件结构: 变量名;结果

例如

$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:最小的示例-这就是为什么我删除了文件加载并拆分的原因

2 个答案:

答案 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

Demo on 3v4l.org

答案 1 :(得分:0)

为什么要用这样的双引号括住$arr['x']

$x = "$arr['x']";

从该语句中删除引号,并使它像这样

$x = $arr['x'];