1

我想将文件中的变量作为字符串加载并稍后进行比较

文件结构:变量名;结果

例如,

$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:最小的例子 - 这就是我从文件中删除加载并拆分的原因

4

2 回答 2

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

3v4l.org 上的演示

于 2018-10-30T22:34:29.033 回答
0

为什么你写$arr['x']这样用双引号括起来

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

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

$x = $arr['x'];
于 2018-10-30T22:28:06.000 回答