Возникли проблемы с php Random Math и генератором операторов на 5 строке, а также с генератором таблиц с 2 столбцами

#php #math #random #operators #generator

#php #математика #Случайный #операторы #генератор

Вопрос:

Пока у меня есть это для генерации случайных чисел, и мне это нужно для генерации случайных операторов, в которых он просто прокручивает массив и выдает те же 2 оператора.

Таким образом, вместо генерации 5 строк он генерирует около 12. Я могу заставить его показывать оператора в математической задаче, но я не могу заставить операторов рандомизировать в каждой строке. Где-то что-то не так.

Мне также нужно, чтобы проблема генерировалась в таблице с двумя столбцами, где в одном столбце есть проблема, а в другом — решение. Если кто-то может хотя бы указать мне правильное направление, это было бы очень ценно!

 <?php
for ($x = 0; $x <= 5; $x  ) {
    $num1 = mt_rand(1, 9);
    $num2 = mt_rand(1, 9);

    $operators = array(" ","-",);

    switch ($operators[array_rand($operators)]) {
        case " ":
            $result = $num1   $num2;
            break;
        case "-":
            $result = $num1 - $num2;
            break;
    }
    foreach($operators as $value){
        echo "$num1 $value $num2 = $result <br>";
    }
}
?>
  

Ответ №1:

Попробуйте этот способ:

 for ($x = 0; $x <= 5; $x  ) {
$num1 = mt_rand(1, 9);
$num2 = mt_rand(1, 9);

$operators = array(" ","-",);
$value = $operators[array_rand($operators)];

switch ($value) {
case " ":
    $result = $num1   $num2;
    break;
case "-":
    $result = $num1 - $num2;
    break;
}
    echo "$num1 $value $num2 = $result <br>";
}
  

Ответ №2:

  1. Вам не нужно повторять $operators , так как вы выбираете случайный.
  2. Нет необходимости заново создавать $operators в цикле.
  3. Если предполагается, что код выводит 5 строк, то for условие должно быть изменено на $x < 5 (вместо $x <= 5 ).

Исправленная версия

 <?php
$operators = [" ", "-"];

for ($x = 0; $x < 5; $x  ) {
  $num1 = mt_rand(1, 9);
  $num2 = mt_rand(1, 9);

  $k = array_rand($operators);
  switch ($operators[$k]) {
  case " ":
    $result = $num1   $num2;
    break;
  case "-": // break
  default:
    $result = $num1 - $num2;
    break;
  }
  echo "$num1 {$operators[$k]} $num2 = $result<br/>n";
}