首先,我将数组转换为集合以便能够使用集合方法,然后对此集合执行一些处理... 但是有一个偏移错误! 你能告诉我我的错误在哪里吗?
public function MassTransferCh2Q1()
{
$a1 = range('1', '40', '0.3');
$a2 = range('4', '44', '0.3');
$a3 = range('1', '40', '0.5');
$a4 = range('5', '45', '0.5');
$calculated = [];
//calculate #36 Answers array
for ($i = 0; $i <= 35; $i++){
$calculated[$i] = ($a1[$i]/($a1[$i]+$a2[$i]))*(-1*$a3[$i]) + ($a2[$i]/($a1[$i]+$a2[$i]))*($a4[$i]) ;
$calculated[$i] = $this->truncate_number($calculated[$i]);
}
//Convert $calculated Array to a Collection
$results = collect($calculated);
for ($i = 0; $i <= count($results); $i++){
//select Correct answer
$correctAnswer = $results->only($i);
//delete correct answer from calculated collection, so $calculate collection will be equal to incorrect answers ...
$incorrectAnswers = $results->except($i);
//select 5 random item from incorrect answers collection
$randIncorrectAnswers = $incorrectAnswers->random(5);
$answerModel = New Answer();
$answerModel->correct_ans = $correctAnswer;
$answerModel->question_id = '1';
for($n = 0; $n <= 5; $n++){
$answerModel['incorrect_ans_'.$i] = $randIncorrectAnswers[$n];
}
$answerModel->save();
}
return $results;
}
答案 0 :(得分:2)
我没有测试你的代码,但我认为这条线路是错误的:
for ($i = 0; $i <= count($results); $i++)
应该是:
for ($i = 0; $i < count($results); $i++)
你从索引0开始,如果结果包含36个项目,你试图访问$ result [36]并且那个不存在。