PHP计算,其中部分存储在字符串中

时间:2017-06-21 08:50:17

标签: php calculation

使用类似的代码

$tk = intval($_GET['tk']);

$vosa = $_GET['vosa'];

echo $tk*100*$vosa;

其中$ vosa是一串类似0.0425/1920*60*8的字符串。我需要将其替换为而不是先计算,将其替换为回声,然后回显整个事件$tk*100*0.0425/1920*60*8结果。我怎么能做到这一点?

5 个答案:

答案 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;

示例:https://eval.in/819834

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