请参阅下面的代码
$rand1 = rand(0,9);
$rand2 = rand(0,9);
$operator = array('*','/','+','-');
$randoperator = $operator[rand(0,3)];
$finaalvalue = $rand1."$randoperator".$rand2;
echo $rand1.$randoperator.$rand2.'='.$finaalvalue;
我想取两个随机数并做随机操作,如+, - ,*,/并获取它们的值
如2-5 = 6
在做什么是我缺少的时候有一些问题
答案 0 :(得分:1)
显而易见的答案是使用eval
功能,但强烈建议不要使用它:
警告 eval()语言结构非常危险,因为它允许执行任意PHP代码。它的用途就是这样 泄气。如果您已经仔细确认没有其他的 选项比使用这个结构,特别注意不要通过 任何用户在没有正确验证的情况下向其提供数据 预先。
另一个选项是编写执行所需操作的单独代码块,然后选择适当的分支,例如,使用switch...case
语句:
<?php
$rand1 = rand(0, 9);
$rand2 = rand(0, 9);
$operator = array('*', '/', '+', '-');
$randoperator = $operator[rand(0, 3)];
switch ($randoperator) {
case "+":
$finaalvalue = $rand1 + $rand2;
break;
case "-":
$finaalvalue = $rand1 - $rand2;
break;
case "*":
$finaalvalue = $rand1 * $rand2;
break;
case "/":
$finaalvalue = $rand1 / $rand2;
break;
}
echo $rand1 . $randoperator . $rand2 . '=' . $finaalvalue;
答案 1 :(得分:1)
如果我正确地阅读你的问题,你就是在计算一个字符串,而不是应用运算符。您必须将代码应用于rand1和rand2以计算最终值。
简单的方法是在回复之前评估$ finaalvalue($finalvaalue = eval("return $finaalvalue ;");
)。
如果您需要快速运行代码或不信任输入,请使用开关或功能映射:
$operatorMap = array(
'+' => function($a, $b) { return $a + $b; },
'*' => function($a, $b) { return $a * $b; },
...
);
$finaalvalue = $operatorMap[$operator]($rand1, $rand2);
与方法和普通函数相比,PHP匿名函数运行缓慢,因此在速度很重要的紧密循环中避免使用它们。
这是一个功课问题吗?你应该做自己的工作。
答案 2 :(得分:0)
这应该适合你:
(如果你做随机计算,你必须检查没有除零)
<?php
function calculate_string( $mathString ) {
$mathString = trim($mathString);
$mathString = str_replace ('[^0-9\+-\*\/\(\) ]', '', $mathString);
$compute = create_function("", "return (" . $mathString . ");" );
return 0 + $compute();
}
$rand1 = rand(0,9);
$rand2 = rand(0,9);
$operator = array('*','/','+','-');
$randoperator = $operator[rand(0,3)];
if($operator = "/" && $rand2 == 0)
echo "Division by zero!";
else {
$finaalvalue = calculate_string($rand1 . $randoperator . $rand2);
echo $rand1.$randoperator.$rand2.'='.$finaalvalue;
}
?>
答案 3 :(得分:0)
建议您通过开关案例计算数学运算。您的系统无法执行数学运算,它会生成一个字符串。这是串联。
$rand1 = rand(0,9);
$rand2 = rand(0,9);
$operator = array('*','/','+','-');
$randoperator = $operator[rand(0,3)];
switch($randoperator){
case '+':
$finaalvalue = $rand1 + $rand2;
break;
case '-':
$finaalvalue = $rand1 - $rand2;
break;
case '/':
if(!$rand2) $rand2++;
$finaalvalue = $rand1 / $rand2;
break;
case '*':
$finaalvalue = $rand1 * $rand2;
break;
}
echo $rand1.$randoperator.$rand2.'='.$finaalvalue;