php随机运算符及其操作

时间:2014-11-30 08:48:22

标签: php random operators

请参阅下面的代码

$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

在做什么是我缺少的时候有一些问题

4 个答案:

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