Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将变量名和结果保存到字符串中,拆分并比较-但不起作用_Php - Fatal编程技术网

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

Php 将变量名和结果保存到字符串中,拆分并比较-但不起作用,php,Php,我想把文件中的变量作为字符串加载,以后再比较 文件结构: 变量名;结果 e、 g 我加载此文件(工作)并将拆分后的第一项分配给$x,例如 $x = "$arr['x']"; 分析错误:语法错误,意外的“”(T_封装的_和_空格),应为“-”或标识符(T_字符串)或变量(T_变量)或数字(T_NUM_字符串) 然后比较 if ($result == $x) { echo "ok"; } 还是不能这样做? PS:最简单的例子-这就是为什么我从文件中删除了加载,并将其拆分为什么您用双引号编

我想把文件中的变量作为字符串加载,以后再比较

文件结构: 变量名;结果

e、 g

我加载此文件(工作)并将拆分后的第一项分配给$x,例如

$x = "$arr['x']";
分析错误:语法错误,意外的“”(T_封装的_和_空格),应为“-”或标识符(T_字符串)或变量(T_变量)或数字(T_NUM_字符串)

然后比较

if ($result == $x)
{
    echo "ok";
}
还是不能这样做?
PS:最简单的例子-这就是为什么我从文件中删除了加载,并将其拆分

为什么您用双引号编写了附带的
$arr['x']

$x = "$arr['x']";
$x = $arr['x'];
删除此语句中的引号,并使其如下所示

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

因为变量中有表达式,所以需要编写表达式解析器或使用。这就是如何使其与
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

此文件的用途是什么?可能有更好的方法可以做到这一点,比如在PHP文件中保存数组。“文件中的变量”-当它在文件中时,它不是变量。这只是一根绳子。php脚本中是否有类似的代码?这听起来很像一个XY问题。它只表明它是一个字符串,它来自文件tnx to all和tnx to you nick&eval-我几个小时前也试过,但我忘了在字符串中使用“;”。。。所以你解决了,救了我一天-tnx alot@Robert很高兴听到。如果这确实回答了你的问题,请考虑标记答案接受(在下/下投票箭头下的复选标记)。我会的,但我需要更多reputation@Robert你不需要任何声誉来接受答案(投票箭头下的勾号),只需要使用投票箭头,通过接受,你实际上会获得声誉(2分)。