Php 以数学和数字作为变量的求值字符串

Php 以数学和数字作为变量的求值字符串,php,Php,我有一个数学表达式,我想插入一些不同的数值变量来检查表达式是真是假 但是怎么做呢?我需要最快的方法来实现它,因为表达式被迭代了很多次 表达式必须是字符串 $exp = '$amount * $qty / 100 == $total'; $amount = 300; $qty = 200; $total = 500; echo eval("$exp"); 您需要在计算的字符串中使用return关键字。此外,还必须使用最终的是一个有效的表达式 从: 返回值 eval()返回NULL,除非在求值

我有一个数学表达式,我想插入一些不同的数值变量来检查表达式是真是假

但是怎么做呢?我需要最快的方法来实现它,因为表达式被迭代了很多次

表达式必须是字符串

$exp = '$amount * $qty / 100 == $total';

$amount = 300;
$qty = 200;
$total = 500;

echo eval("$exp");

您需要在计算的字符串中使用
return
关键字。此外,还必须使用最终的
是一个有效的表达式

从:

返回值
eval()返回NULL,除非在求值代码中调用return,在这种情况下,返回传递给return的值


您需要在计算的字符串中使用
return
关键字。此外,还必须使用最终的
是一个有效的表达式

从:

返回值
eval()返回NULL,除非在求值代码中调用return,在这种情况下,返回传递给return的值


如果表达式始终相同,则不需要使用这样的字符串。功能的实现和运行速度更快:

<?php
function calc($amount, $quantity)
{
    return $amount * $quantity / 100;
}

echo sprintf('%.2f', calc(300, 200));
可能大多数共享主机都不允许这样做(而且它们也不允许
eval

您还可以实现一个解析器,就像StringCalc一样。您需要隔离令牌(通常使用regex)并创建一个二叉树,同时考虑操作符的优先级


如果表达式始终相同,则不需要使用这样的字符串。功能的实现和运行速度更快:

<?php
function calc($amount, $quantity)
{
    return $amount * $quantity / 100;
}

echo sprintf('%.2f', calc(300, 200));
可能大多数共享主机都不允许这样做(而且它们也不允许
eval

您还可以实现一个解析器,就像StringCalc一样。您需要隔离令牌(通常使用regex)并创建一个二叉树,同时考虑操作符的优先级


那么计算结果总是一样的,不同的是数值和你比较的总数?我不明白你为什么需要评估。经验总是一样的吗?是的,总是一样的吗
$expr=function($a,$q,$t){return$a*$q/100==$t}
试试看。所以计算结果总是一样的,不同的是你比较的值和总数?我不明白你为什么需要评估。经验总是一样的吗?是的,总是一样的吗
$expr=function($a,$q,$t){return$a*$q/100==$t}
试试它。它可以工作:)但是如果我想在插入变量后也打印整个表达式呢@clarkk您可以使用
preg\u replace\u callback()
:它可以工作:),但是如果我想在插入变量后也打印整个表达式呢@clarkk您可以使用
preg\u replace\u callback()
<?php
$expr = '300 * 200 / 100';
$result = (float)exec('echo ' . escapeshellarg($expr) . ' | bc');
echo sprintf('%.2f', $result);