如何将字符串中的变量评估为变量?

时间:2017-05-19 04:27:29

标签: php string variables

这是一种奇怪的事情,我不确定如何表达这个问题。我无法找到任何不涉及在已包含数字的字符串上使用eval()的内容。我的字符串可能包含数字,但会有"变量"在那里。

eval()完全不可能。

这样做的目的是允许第三方编写将存储在数据库中的方程式。将检索该等式,并应根据用户提交的输入进行评估。

因此,对于一个非常基本的例子,我们来计算一个矩形的面积。简单w * h。从数据库中提取时,等式是一个字符串:

(total_width * total_height)

用户提交他们的号码$ _POST [' total_width']和$ _POST [' total_height']。该脚本从数据库中获取并获取该公式,并需要将其转换为:

$ _ POST [' total_width'] * $ _POST [' total_height']

问题当然是等式是一个字符串而且那些不是变量。

我已经将strtr,extract,变量作为变量和各种自定义类进行了查看。我希望有一些很酷的功能,我还没有找到(就像那个发电机/产量的东西)而且不需要一些超大功能。

我创建了一个$ str ="($ one * $ two)"的虚拟字符串,但只显示"(1 * 2)" (如果,你知道,我将1和2传递给它。)

2 个答案:

答案 0 :(得分:0)

我只是将方程列表保存为函数...然后展开字符串并迭代它以确定要调用的函数。

$num1 = 2;
$num2 = 5;

$equation = 'num1 * num2';
$pieces = explode(" ", $text);

# we now have: ['num1','*','num2']
# then you sort through

$thisEQ = null;
foreach($pieces as $piece){
  if($piece==='num1'||$piece==='num1'){ continue; }

  if($piece==='*'){ $thisEQ = 'multiply_2_int'; }
}

function multiply_2_int($n1,$n2){
  return $n1 * $n2;
}

switch ($thisEQ) {
  case 'multiply_2_int':
    multiply_2_int($num1,$num2);
    break;
  # etc..
}

答案 1 :(得分:0)

如果我理解你想要什么,你基本上想让用户使用代数输入公式然后替换它们?

也许preg_replace就是您之后的目标?

示例:

<?php

  $x = 5;
  $y = 10;

  $formula = '$x * $y';


  $formula = preg_replace("/".preg_quote('$x', '/')."/", $x, $formula);
  $formula = preg_replace("/".preg_quote('$y', '/')."/", $y, $formula);
  echo $formula;

?>

https://eval.in/800808