Перетасуйте цикл foreach в laravel

#php #laravel

Вопрос:

У меня есть список из десяти тестовых вопросов, и я пытаюсь перетасовать четыре из десяти вопросов каждому студенту, я использовал тасовку по каждому вопросу и использовал take(4). Это работает, но варианты вопросов также изменяют положение и рассеиваются, когда я выбирал, я также пробовал случайные(4), которые также показывают то же самое. Любые исправления к этому. Ниже приведен код.

 @foreach ($lesson->test->questions->shuffle()->take(4) as $question)
                <b>{{ $loop->iteration }}. {{ $question->question }}</b>
                <br />
                @foreach ($question->options as $option)
                    <input type="radio" wire:model='question.{{ $question->id }}'
                        name="questions[{{ $question->id }}]" value="{{ $option->id }}" />
                    {{ $option->option_text }}<br />
                @endforeach
                <br />
            @endforeach
 

Случайный процесс

 @foreach ($lesson->test->questions->random(4) as $question)
                <b>{{ $loop->iteration }}. {{ $question->question }}</b>
                <br />
                @foreach ($question->options as $option)
                    <input type="radio" wire:model='question.{{ $question->id }}'
                        name="questions[{{ $question->id }}]" value="{{ $option->id }}" />
                    {{ $option->option_text }}<br />
                @endforeach
                <br />
            @endforeach
 

Комментарии:

1. Пожалуйста, поделитесь своим примером данных о вариантах.

2. это ссылка на видео, показывающее поведение цикла loom.com/share/92fb1d246e0d47a686b1a33e695c1177

3. сколько вариантов каждого вопроса? Я думаю, что вашим значением параметра должны быть данные json

4. у каждого вопроса есть свои наборы опций, в зависимости от того, сколько их задано, некоторые вопросы содержат два, некоторые-четыре, а некоторые-три. Можете ли вы написать кодовое представление набора данных json для опций. Спасибо

5. Вам нужен вариант с правильным ответом или что-то еще? Вам нужен формат данных JSON. Пожалуйста, найдите в Google пример данных JSON

Ответ №1:

нашел исправление, проблема в том, что компонент обновляется всякий раз, когда я нажимаю на опцию, которая заставляет его повторно отображать и перетасовывать вопросы. Что я сделал, так это позвонил в wire:игнорируйте, чтобы он не перерисовывался, пока я нажимаю на ответ. Смотрите код ниже

  <form wire:submit.prevent='lessonTest' action="{{ route('lessons.test', [$lesson->slug]) }}"
            method="post">
            {{ csrf_field() }}
            <div wire:ignore>
                @foreach ($lesson->test->questions->random(4) as $questions)
                    <b>{{ $loop->iteration }}. {{ $questions->question }}</b>
                    <br />
                    @foreach ($questions->options as $option)
                        <input type="radio" wire:model='question.{{ $questions->id }}' name="questions[{{ $questions->id }}]"
                            value="{{ $option->id }}" required />
                        {{ $option->option_text }}<br />
                    @endforeach
                    <br />

                @endforeach
            </div>

            <button class="btn btn-success btn-lg refresh" type="submit">Submit</button>
        </form>