簡體   English   中英

PHP隨機運算符及其操作

[英]php random operator and their operations

請參閱下面的代碼

$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

我在想什么,卻在做某事

顯而易見的答案是使用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;

如果我正確地閱讀了您的問題,則說明您正在計算字符串,而不應用運算符。 您必須將代碼應用於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匿名函數的運行速度較慢,因此在速度很重要的情況下,請避免在緊密循環中使用它們。

這是一個作業問題嗎? 你應該自己做。

這應該為您工作:

(另外,如果您進行隨機計算,則必須檢查是否沒有被零除)

<?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;
    }


?>

建議您通過切換案例來計算數學運算。 您的系統無法執行數學運算,它將生成一個字符串。 那是串聯。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM