mysql行中存储了几个数学公式供个人使用。i、 一个字段包含一个字符串形式的公式(varchar):($a+$b)/$c)现在在php中,变量由foreach循环动态填充:
$temp_array[$deviceData["devicename"]] = $deviceSum;
$devicedata[“devicename”]表示$a、$b、$c。数组可以看起来像$a=>20,$b=>30,$c=>580。如何将此变量与字符串公式一起使用?谢谢你的帮助。
lhcgjxsq1#
不幸的是,你需要评估一下。如果值如下:
$deviceData["devicename"] = [ 'a' => 20, 'b' => 30, 'c' => 580 ];
你可能需要把他们隔离开来 extract() 如果有超过3个等,封装在函数/闭包中就可以了。
extract()
<?php $formula = '(($a+$b)/$c)'; $deviceData["devicename"] = ['a' => 20, 'b' => 30, 'c' => 580]; $runFormula = function ($formula, $data) { extract($data); return eval('return '.$formula.';'); }; echo $runFormula($formula, $deviceData["devicename"]);
https://3v4l.org/i2rbk或者只是:
extract($deviceData["devicename"]); echo eval('return '.$formula.';');
但是您正在用提取的内容污染全局变量表,可能会导致更多问题。尽管如果公式是由用户定义的,不要使用eval,否则您将有安全问题。在任何方面,我都不对任何损害承担任何责任,包括但不限于因使用所提供的代码而产生、导致或以任何方式与之相关的直接、间接、特殊或后果性损害,无论是否基于保证、合同、侵权或其他原因;是否有人身、财产或其他原因造成伤害;以及是否因本规范的使用而遭受损失;p
1条答案
按热度按时间lhcgjxsq1#
不幸的是,你需要评估一下。
如果值如下:
你可能需要把他们隔离开来
extract()
如果有超过3个等,封装在函数/闭包中就可以了。https://3v4l.org/i2rbk
或者只是:
但是您正在用提取的内容污染全局变量表,可能会导致更多问题。
尽管如果公式是由用户定义的,不要使用eval,否则您将有安全问题。
在任何方面,我都不对任何损害承担任何责任,包括但不限于因使用所提供的代码而产生、导致或以任何方式与之相关的直接、间接、特殊或后果性损害,无论是否基于保证、合同、侵权或其他原因;是否有人身、财产或其他原因造成伤害;以及是否因本规范的使用而遭受损失;p