首頁  >  問答  >  主體

為什麼我的陣列洗牌兩次而不是一次?

我創建了一份有關 http 程式碼的問卷,這是 100 程式碼的範例:

public static function list(): array
    {
        return
            [
                [
                    'http_message' => 'Continue',
                    'http_code' => '100'
                ],
                [
                    'http_message' => 'Switching Protocols',
                    'http_code' => '101'
                ],
                [
                    'http_message' => 'Processing',
                    'http_code' => '102'
                ],
                [
                    'http_message' => 'Early Hints',
                    'http_code' => '103'
                ],
            ];
    }

然後是我的表單類型:

class QuizControllerType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add('response', TextType::class, [
                'attr' => ['autofocus' => true]
            ])
            ->add('submit', SubmitType::class, array(
                'label' => 'Suivant'
            ))
        ;
    }

    public function configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            // Configure your form options here
        ]);
    }
}

最後是我的控制器:

getSession();

        $form = $this->createForm(QuizControllerType::class);

        $indiceQuestion = $request->query->get('question', 0);

        if (0 === $indiceQuestion) {
            $會話->clear();
            $questionsList = InformationCodeService::list();
            轉儲(1,$questionsList);
            隨機播放($questionsList);
            轉儲(2,$questionsList);
            $responses = array_column($questionsList, 'http_code');
            $session->set('questionsList', $questionsList);
            $session->set('responses', $responses);
            $session->set('responseFromUser', []);
        }

        $responseFromUser = $session->get('responseFromUser');

        $message = \count($session->get('questionsList')) >; $index問題 ? $session->get('questionsList')[$indiceQuestion]['http_message'] : '';

        $form->handleRequest($request);

        if ('' === $訊息) {
            轉儲('je passse');
            $結果=[];

            $responses = $session->get('responses');
            $questionsList = $session->get('questionsList');

            for ($i = 0; $i < count($responseFromUser); $i ) {
                if ($responseFromUser[$i] === $responses[$i]) {
                    $結果[$i] = $responseFromUser[$i];
                }
            }

            $分數 = \count($結果)。 '/'。 \count($questionsList);
            $session->set('分數', $score);
            返回 $this->redirectToRoute('app_quiz_finish');
        }

        dump(3,$session->get('questionsList'));

        if ($form->isSubscribed() && $form->isValid()) {
            dd($session->get('questionsList'));
            $response = $form->getData()['response'];
            $responseFromUser[] = $response;
            $session->set('responseFromUser', $responseFromUser);
            $index問題;
            dd($indiceQuestion);

            return $this->redirectToRoute('app_quiz', ['question' => $indiceQuestion]);
        }

        返回 $this->render('quiz/index.html.twig', [
            '形式' => $form->createView(),
            '消息' => $訊息,
            'indice_question'=>; $index問題,
            '總問題' => \count($session->get('questionsList'))
        ]);
    }
    #[路線('/完成',名稱:'app_quiz_finish')]
    公共函數 finish(): 回應
    {
        返回 $this->render('quiz/finish.html.twig');
    }
}

在 url https://127.0.0.1:8001/ 的索引頁上,我的第一個轉儲按順序列印倉庫,轉儲 2 和 3 打亂順序列印:

array:4 [▼
  0 => array:2 [▼
    "http_message" => "Early Hints"
    "http_code" => "103"
  ]
  1 => array:2 [▼
    "http_message" => "Processing"
    "http_code" => "102"
  ]
  2 => array:2 [▼
    "http_message" => "Continue"
    "http_code" => "100"
  ]
  3 => array:2 [▼
    "http_message" => "Switching Protocols"
    "http_code" => "101"
  ]
]

但是當我提交表單時,dd 再次列印我的陣列隨機播放:

array:4 [▼
  0 => array:2 [▼
    "http_message" => "Processing"
    "http_code" => "102"
  ]
  1 => array:2 [▼
    "http_message" => "Switching Protocols"
    "http_code" => "101"
  ]
  2 => array:2 [▼
    "http_message" => "Continue"
    "http_code" => "100"
  ]
  3 => array:2 [▼
    "http_message" => "Early Hints"
    "http_code" => "103"
  ]
]

我不明白為什麼要這樣做。如果我刪除dd,提交表單後,我將使用不同的陣列重定向到https://127.0.0.1:8001/?question=1 ,如果我再次提交,我將重定向到https://127.0.0.1 :8001/?question=2 但這次使用與上一頁相同的數組,並且數組不再隨機。

所以這意味著我的陣列被洗牌兩次:

但我只想在到達本地主機頁面時將數組隨機播放一次

我不知道為什麼它會這樣,如果你有任何想法,那將是一種樂趣

P粉818561682P粉818561682187 天前237

全部回覆(1)我來回復

  • P粉189606269

    P粉1896062692024-03-20 10:51:44

    當您提交表單時,您沒有傳遞 question 參數。所以程式碼

    $indiceQuestion = $request->query->get('question', 0);
    

    設定預設值$indiceQuestion = 0,再次陷入陣列打亂的情況。

    您可以像這樣轉換條件

    if (0 === $indiceQuestion && !$form->isSubmitted())
    

    或檢查其他條件,例如 $session->get('questionsList') 中是否存在值

    回覆
    0
  • 取消回覆