ホームページ  >  に質問  >  本文

配列が 1 回ではなく 2 回シャッフルされるのはなぜですか?

http コードに関するアンケートを作成しました。100 個のコードの例を次に示します。

パブリック静的関数 list(): 配列
    {
        戻る
            [
                [
                    'http_message' => '続行',
                    'http_code' => '100'
                ]、
                [
                    'http_message' => 'プロトコルの切り替え',
                    'http_コード' => '101'
                ]、
                [
                    'http_message' => '処理中',
                    'http_コード' => '102'
                ]、
                [
                    'http_message' => '初期のヒント',
                    'http_コード' => '103'
                ]、
            ];
    }

次に、フォームの種類:

クラス QuizControllerType は AbstractType を拡張します
{
    パブリック関数 buildForm(FormBuilderInterface $builder, array $options): void
    {
        $ビルダー
            ->add('応答', TextType::class, [
                'attr' => ['autofocus' => true]
            ])
            ->add('submit', SubmitType::class, array(
                'ラベル' => 'スーバント'
            ))
        ;
    }

    パブリック関数configureOptions(OptionsResolver $resolver): void
    {
        $resolver->setDefaults([
            // ここでフォームのオプションを設定します
        ]);
    }
}

ついに私のコントローラー:

<?php

名前空間 App\Controller;

App\Form\QuizControllerType を使用します。
App\Service\HttpCodeService を使用します。
Symfony\Bundle\FrameworkBundle\Controller\AbstractController を使用します。
Symfony\Component\HttpFoundation\Request を使用します。
Symfony\Component\HttpFoundation\Response を使用します。
Symfony\Component\Routing\Annotation\Route を使用します。

クラス QuizController は AbstractController を拡張します
{
    #[Route('/', 名前: 'app_quiz')]
    パブリック関数インデックス(リクエスト $request): レスポンス
    {
        $session = $request->getSession();

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

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

        if (0 === $indiceQuestion) {
            $session->clear();
            $questionsList = InformationCodeService::list();
            ダンプ(1,$questionsList);
            シャッフル($questionsList);
            dump(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')) > $indice質問 ? $session->get('questionsList')[$indiceQuestion]['http_message'] : '';

        $form->handleRequest($request);

        if ('' === $message) {
            dump('je passe');
            $results = [];

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

            for ($i = 0; $i set('スコア', $score);
            return $this->redirectToRoute('app_quiz_finish');
        }

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

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

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

        return $this->render('quiz/index.html.twig', [
            'フォーム' => $form->createView(),
            'メッセージ' => $メッセージ、
            'インデックス_質問' => $index質問、
            'total_question' => \count($session->get('questionsList'))
        ]);
    }
    #[Route('/finish', 名前: 'app_quiz_finish')]
    パブリック関数finish(): 応答
    {
        return $this->render('quiz/finish.html.twig');
    }
}

url https://127.0.0.1:8001/ のインデックス上、我の第一转储按顺序打印数组、转储 2 および 3 打乱顺序打印:

配列:4 [▼
  0 => 配列:2 [▼
    "http_message" => "初期のヒント"
    "http_code" => "103"
  】
  1 => 配列:2 [▼
    "http_message" => "処理中"
    "http_code" => "102"
  】
  2 => 配列:2 [▼
    "http_message" => "続行"
    "http_code" => "100"
  】
  3 => 配列:2 [▼
    "http_message" => "プロトコルの切り替え"
    "http_code" => "101"
  】
】

しかし、フォームを送信すると、dd は配列シャッフルを再度出力します:

配列:4 [▼
  0 => 配列:2 [▼
    "http_message" => "処理中"
    "http_code" => "102"
  】
  1 => 配列:2 [▼
    "http_message" => "プロトコルの切り替え"
    "http_code" => "101"
  】
  2 => 配列:2 [▼
    "http_message" => "続行"
    "http_code" => "100"
  】
  3 => 配列:2 [▼
    "http_message" => "初期のヒント"
    "http_code" => "103"
  】
】

なぜこれが行われるのか理解できません。 dd を削除すると、フォームを送信した後、別の配列を持つ https://127.0.0.1:8001/?question=1 にリダイレクトされます。もう一度、https://127.0.0.1:8001/?question=2 にリダイレクトしますが、今回は前のページと同じ配列を使用し、配列はランダムではなくなりました。

これは、配列が 2 回シャッフルされることを意味します:

ただし、localhost ページに到達したときに配列を 1 回だけシャッフルしたいです

なぜこれが行われるのか分かりません。何かアイデアがあれば、それは喜びです

P粉818561682P粉818561682187日前236

全員に返信(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
  • キャンセル返事