在php字符串中执行计算


Perform calculation inside php string

我有一个类似的字符串

$str = "23 + %%val%%";

现在,如果我想执行这个计算,给%%val%%一个值,例如20,我该怎么做?

你不能。PHP不是递归可执行的,除非您使用eval()DONT使用eval())。为什么你不能只做

$str = 23 + $val;

如果你真的想保留这种格式,你可以这样做:

function calculate($string, $value) {
  return str_replace('%%val%%', $value, $string);
}
$str = "23 + %%val%%";
$value = 25;
$result = eval('return '.calculate($str, $value).';');
var_dump($result); // int(48)
$result = eval('return '.calculate("16 + %%val%%", 10).';');
var_dump($result); // int(26)

但要小心eval(参见:eval()

eval()语言构造非常危险,因为它允许执行任意PHP代码。

$a = 10;
$b = 10;
$c = 10;
$string = "a + b + c";
$result = eval('return ' . preg_replace('/([a-zA-Z0-9])+/', ''$$1', $string) . ';');
echo $result;

这将回声30。

这里还有另一篇关于这一点的文章在字符串中计算和

$str = "23 + {$value}"

然后,要执行计算,您需要一个函数,该函数接受一个字符串并分解整数和运算符。这似乎是一种浪费,因为php不是强类型的,而且您可以很容易地将字符串转换为整数。