2016-10-13 2 views
0

У меня есть одно требование, в котором оно должно генерировать от двух до трех случайных чисел, суммирование которых не должно переноситься. Я сделал код ниже с некоторой ссылкой из stackoverflow, но я получаю несколько пустых массивов. Поток работает идеально.Получение неправильного массива в рекурсивной функции для генерации случайного числа

Мне просто нужны 2 цифры цифр, суммирование которых не должно происходить. как 25 +24 = 49, а не 25 + 25, который обеспечивает унос 1.

function print_questions1($i){ 
    if($i < 3){ 
     $m = 1; 
     $n = 9; 
     $number1 = rand($m,$n); 
     $number2 = rand($m,$n); 
     if (($number1+$number2)<10) { 
      ${'final_num1_'.$i} = $number1; 
      ${'final_num2_'.$i} = $number2; 
      ${'final_num3_'.$i} = 0; 
      $final_array = array(
       'number1_'.$i=> $number1, 
       'number2_'.$i => $number2, 
       'number3_'.$i => 0 
      ); 
      return $final_array; 
     } 
     else 
     { 
      $this->print_questions1($i); 
     } 
    } elseif ($i > 2 && $i < 7) { 
     $m = 10; 
     $n = 99; 
     $number1 = rand($m,$n); 
     $number2 = rand($m,$n); 
     $value1 = str_split($number1,1);  
     $value2 = str_split($number2,1); 
     if (($value1[0]+$value2[0])<9 && ($value1[1]+$value2[1])<9) { 
      ${'final_num1_0_'.$i} = $value1[0]; 
      ${'final_num1_1_'.$i} = $value1[1]; 
      ${'final_num2_0_'.$i} = $value2[0]; 
      ${'final_num2_1_'.$i} = $value2[1]; 
      ${'final_num3_0_'.$i} = 0; 
      ${'final_num3_1_'.$i} = 0; 
      $final_array = array( 
       'number1_0_'.$i=> ${'final_num1_0_'.$i}, 
       'number1_1_'.$i=> ${'final_num1_1_'.$i}, 
       'number2_0_'.$i=> ${'final_num2_0_'.$i}, 
       'number2_1_'.$i=> ${'final_num2_1_'.$i}, 
       'number3_0_'.$i=> 0, 
       'number3_1_'.$i=> 0 
      ); 
      return $final_array; 
     } 
     else 
     { 
      $this->print_questions1($i); 
     } 
    } elseif($i > 6 && $i < 10){ 
     $m = 10; 
     $n = 99; 
     $number1 = rand($m,$n); 
     $number2 = rand($m,$n); 
     $number3 = rand($m,$n); 
     $value1 = str_split($number1,1); 
     $value2 = str_split($number2,1); 
     $value3 = str_split($number3,1); 
     if (($value1[0]+$value2[0]+$value3[0])<9 && ($value1[1]+$value2[1]+$value3[1])<9) { 
      ${'final_num1_0_'.$i} = $value1[0]; 
      ${'final_num1_1_'.$i} = $value1[1]; 
      ${'final_num2_0_'.$i} = $value2[0]; 
      ${'final_num2_1_'.$i} = $value2[1]; 
      ${'final_num3_0_'.$i} = $value3[0]; 
      ${'final_num3_1_'.$i} = $value3[1]; 
      $final_array = array( 
        'number1_0_'.$i=> ${'final_num1_0_'.$i}, 
        'number1_1_'.$i=> ${'final_num1_1_'.$i}, 
        'number2_0_'.$i=> ${'final_num2_0_'.$i}, 
        'number2_1_'.$i=> ${'final_num2_1_'.$i}, 
        'number3_0_'.$i=> ${'final_num3_0_'.$i}, 
        'number3_1_'.$i=> ${'final_num3_1_'.$i} 
       ); 
       return $final_array; 
     } else { 
      $this->print_questions1($i); 
     }   
    } 
} 

function print_questions($question_type) { 
    $data = array(); 
    for ($i=0; $i <10 ; $i++) { 
     if ($i < 3) { 
       $value = $this->print_questions1($i);    
       array_push($data, $value); 


     }elseif ($i > 2 && $i < 7) { 
      $value = $this->print_questions1($i); 
      array_push($data, $value); 

     }else { 
      $value = $this->print_questions1($i); 
      array_push($data, $value); 
     } 
    } 

Вывод вышеприведенной функции дает несколько пустых значений, как ниже массива

Array 
(
    [0] => 
    [1] => Array 
     (
      [number1_1] => 1 
      [number2_1] => 2 
      [number3_1] => 0 
     ) 

    [2] => 
    [3] => 
    [4] => 
    [5] => 
    [6] => 
    [7] => Array 
     (
      [number1] => 82 
      [number2] => 83 
      [number3] => 48 
     ) 

    [8] => Array 
     (
      [number1] => 31 
      [number2] => 46 
      [number3] => 39 
     ) 

    [9] => Array 
     (
      [number1] => 25 
      [number2] => 13 
      [number3] => 90 
     ) 

) 

Пожалуйста, дайте мне знать, что я или где я отстаю.

ответ

0

Я ошибся в другой части, которую забыл вернуть функцию. Решение проблемы

function print_questions1($i){ 
     if($i < 3){ 
      $m = 1; 
      $n = 9; 
      $number1 = rand($m,$n); 
      $number2 = rand($m,$n); 
      if (($number1+$number2)<10) { 
       ${'final_num1_'.$i} = $number1; 
       ${'final_num2_'.$i} = $number2; 
       ${'final_num3_'.$i} = 0; 
       $final_array = array(
        'number1_'.$i=> $number1, 
        'number2_'.$i => $number2, 
        'number3_'.$i => 0 
       ); 
       return $final_array; 
      } 
      else 
      { 
       return $this->print_questions1($i); 
      } 
     } elseif ($i > 2 && $i < 7) { 
      $m = 10; 
      $n = 99; 
      $number1 = rand($m,$n); 
      $number2 = rand($m,$n); 
      $value1 = str_split($number1,1);  
      $value2 = str_split($number2,1); 
      if (($value1[0]+$value2[0])<9 && ($value1[1]+$value2[1])<9) { 
       ${'final_num1_0_'.$i} = $value1[0]; 
       ${'final_num1_1_'.$i} = $value1[1]; 
       ${'final_num2_0_'.$i} = $value2[0]; 
       ${'final_num2_1_'.$i} = $value2[1]; 
       ${'final_num3_0_'.$i} = 0; 
       ${'final_num3_1_'.$i} = 0; 
       $final_array = array( 
        'number1_0_'.$i=> ${'final_num1_0_'.$i}, 
        'number1_1_'.$i=> ${'final_num1_1_'.$i}, 
        'number2_0_'.$i=> ${'final_num2_0_'.$i}, 
        'number2_1_'.$i=> ${'final_num2_1_'.$i}, 
        'number3_0_'.$i=> 0, 
        'number3_1_'.$i=> 0 
       ); 
       return $final_array; 
      } 
      else 
      { 
       return $this->print_questions1($i); 
      } 
     } elseif($i > 6 && $i < 10){ 
      $m = 10; 
      $n = 99; 
      $number1 = rand($m,$n); 
      $number2 = rand($m,$n); 
      $number3 = rand($m,$n); 
      $value1 = str_split($number1,1); 
      $value2 = str_split($number2,1); 
      $value3 = str_split($number3,1); 
      if (($value1[0]+$value2[0]+$value3[0])<9 && ($value1[1]+$value2[1]+$value3[1])<9) { 
       ${'final_num1_0_'.$i} = $value1[0]; 
       ${'final_num1_1_'.$i} = $value1[1]; 
       ${'final_num2_0_'.$i} = $value2[0]; 
       ${'final_num2_1_'.$i} = $value2[1]; 
       ${'final_num3_0_'.$i} = $value3[0]; 
       ${'final_num3_1_'.$i} = $value3[1]; 
       $final_array = array( 
         'number1_0_'.$i=> ${'final_num1_0_'.$i}, 
         'number1_1_'.$i=> ${'final_num1_1_'.$i}, 
         'number2_0_'.$i=> ${'final_num2_0_'.$i}, 
         'number2_1_'.$i=> ${'final_num2_1_'.$i}, 
         'number3_0_'.$i=> ${'final_num3_0_'.$i}, 
         'number3_1_'.$i=> ${'final_num3_1_'.$i} 
        ); 
        return $final_array; 
      } else { 
       return $this->print_questions1($i); 
      }   
     } 
    } 
Смежные вопросы