см мой код ниже
$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;