使用类似的代码
$tk = intval($_GET['tk']);
$vosa = $_GET['vosa'];
echo $tk*100*$vosa;
其中$ vosa是一串类似0.0425/1920*60*8
的字符串。我需要将其替换为而不是先计算,将其替换为回声,然后回显整个事件$tk*100*0.0425/1920*60*8
结果。我怎么能做到这一点?
答案 0 :(得分:1)
好的另一个版本。用sprintf
替换字符串中的值。
echo sprintf("%s*100*%s", (string)$tk, (string)$vosa);
如果数字的%d
与您的案例不符,则您可以使用%s
。您可以直接使用$_GET
个变量。所以sprintf是个不错的选择。我用它测试了它:
php -r 'echo sprintf("%s*100*%s", "123", "4.000");'
<强>输出:强>
123*100*4.000
答案 1 :(得分:1)
要输出,只需回显字符串:
echo "{$vosa} = {$result}";
您的问题是如何从$result
计算$vosa
。
一种非常冒险的方式是使用eval()
- 或者有人称之为evil()
。
风险在于我可以向您发送vosa
system('FORMAT C: /AUTOTEST')
的值(这不起作用,但是您理解我的意思)。
// vosa='/bin/dd if=/dev/zero of=etc etc'
// This will return zero. It will return a whole lot of zeroes
// all over your hard disk.
$result = eval("return {$tk}*100*{$vosa};");
可能,使用正则表达式验证$vosa
可能会有所帮助,至少只要您使用简单表达式。
或者,您必须实施expression parser。
这是另一个ready made。你可以这样使用它:
include('./some/where/mathparser.php');
$parser = new MathParser();
$parser->setExpression("{$tk}*100*{$vosa}");
$result = $parser->getValue();
echo "The result of {$tk}*100*{$vosa} is {$result}.";
答案 2 :(得分:0)
您可以使用字符串,然后使用eval
将其作为php代码执行:
<?php
$tk = intval($_GET['tk']);
$vosa = $_GET['vosa'];
echo eval("return $tk*100*$vosa;");
<强>注意强> eval()语言构造非常危险,因为它允许执行任意PHP代码。因此不鼓励使用它。如果您已经仔细验证除了使用此构造之外没有其他选择,请特别注意不要将任何用户提供的数据传递到其中,而不事先正确验证它。
答案 3 :(得分:0)
$tk = intval($_GET['tk']);
$vosa = $_GET['vosa']; // "0.0425/1920*60*8"
$ans = eval('return '.$vosa.';');
echo $ans;
echo "<br>";
echo $tk*100*$ans;
答案 4 :(得分:0)
自己动手
<?php
$tk = $_GET['tk'];
$aeg = $_GET['aeg'];
$kfc = $_GET['kfc'];
$vosa = $_GET['vosa'];
$final = $tk.'*'.$aeg.'*'.$kfc.'*'.$vosa;
$ans = eval('return '.$final.';');
echo round($ans,2);