Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.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,以下是常数: define('Qc', 1); define('D1', 1); define('D2', 1); define('S1D1', 1); define('E1D1', 1); define('E1D2', 1); define('An', 1); define('D3', 1); 公式来自数据库: $formula = "Qc + D1 + D2 + S1D1 + E1D1 +

以下是常数:

define('Qc',        1);
define('D1',        1);
define('D2',        1);
define('S1D1',      1);
define('E1D1',      1);
define('E1D2',      1);
define('An',        1);
define('D3',        1);
公式来自数据库:

$formula = "Qc + D1 + D2 + S1D1 + E1D1 + E1D2 + An + D3";
预期结果:8

尝试此代码

<?php
$formula = "Qc + D1 + D2 + S1D1 + E1D1 + E1D2 + An + D3";
$formulaBreak = explode('+',$formula);
$val = 0;
foreach ($formulaBreak as $bk) {
   if (defined($bk)) {
      $val += (int)constant( trim($bk) );
   }
}
echo $val;
?>

正如Jobaer Shuman在注释中所定义的,公式可以是任何格式,您可以解析公式,去掉
变量,然后借助上面的代码从字符串中获取常量值。您是从数据库中获取常量值,还是仅仅通过公式告诉您要添加哪个常量

无论如何,代码示例不会给你8,因为你把它作为字符串给$formula

尝试删除“从那里。如果这不起作用,请尝试将常量转换为int,如下所示

$formula = (int) CONST1 + (int) CONST2

为了安全起见,我也会在foreach中添加一个if(defined($bk))。谢谢。这对我来说很有用。但是如果更改逻辑运算符,有什么解决方案吗?例如,公式更改为$formula=“100*((Qc+D1+D2)-E1D1)不客气,对于解析公式,您可能需要使用
regex
,我建议您在这种情况下创建另一个问题,询问如何解析至少显示两个公式的变量/公式的字符串。我不太擅长使用
regex
$formula是来自管理设置(数据库)的字符串。这个公式可能会改变。例如:“100*(Qc+D1)/2)常量值是预定义的。公式作为字符串来自数据库。
$formula = (int) CONST1 + (int) CONST2