#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);
}
}
}