Получение неправильного массива в рекурсивной функции для генерации случайного числа

#php #arrays #codeigniter

#php #массивы #codeigniter

Вопрос:

У меня есть одно требование, в котором оно должно генерировать от двух до трех случайных чисел, суммирование которых не должно иметь переноса. Я сделал приведенный ниже код с дополнительной ссылкой из 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 amp;amp; $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 amp;amp; ($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 amp;amp; $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 amp;amp; ($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 amp;amp; $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
        )

)
  

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

Ответ №1:

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

  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 amp;amp; $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 amp;amp; ($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 amp;amp; $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 amp;amp; ($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);
            }         
         }
    }