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);