Случайное использование перетасовки на лезвии laravel делает уникальным

У меня проблема.

У меня есть такой код:

  <?php $q =(count($question->answers)/2) - 1;  ?>
    @php ($q = 3)

    @php ($p = 1)
    @for($i=0; $i <=(count($question->answers)/2) - 1; $i++) 

        <?php 

        $match = $question->answers->where('is_key', 0)->shuffle()->toArray();  

        $match = $match->unique();
        dd($match['text']);

        ?>

        <?php $option = $question->answers->where('order', $i)->where('is_key', 1)->first(); ?>


    <div class = "row">
        <div class = "column" style = "border: 1px solid  #e8e8e8;">
            <b>{{$p}}.</b> {{$match['text']}} 
        </div>

        <div class = "column" style = "border: 1px solid #e8e8e8;">
            <b> {{$p}}. </b>   {{$option->text}} 
        </div>

    </div>

    @php ($p++)
    @endfor

Итак, у меня есть эти две колонки options и match.

Что мне нужно, так это перемешать группу совпадений.

Я пробовал это до сих пор, но когда он перемешивается, он иногда повторяет один и тот же текст, а некоторый текст вообще не отображается.

Например.:

Когда 1 2 3 4 перетасовывается, он выглядит как 1 2 1 4 или 1 2 3 3.

Как сделать цифры уникальными при перемешивании?

Работает ли при звонке ->shuffle()->unique()->toArray()? Что содержит $question->answers? (Это будет Collection чего-то, в зависимости от ->unique() может потребоваться дополнительный параметр)

Tim Lewis 07.09.2018 21:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
698
2

Ответы 2

Попробуйте использовать inRandomOrder ()

$match = $question->answers->where('is_key', 0)->inRandomOrder()->toArray();

он говорит, что Метод inRandomOrder не существует.

lilo 07.09.2018 21:03

Какую версию Laravel вы используете, она существует, смотрите здесь laravel.com/docs/5.7/queries#ordering-grouping-limit-and-off‌ установить

latr.88 07.09.2018 21:06

Просто проверьте, и вы правы, не работает с отношениями посередине

latr.88 07.09.2018 21:14

Нет, это не работает, я обновил свой laravel, но по-прежнему нет другого пути?

lilo 07.09.2018 21:18

Я думаю, что есть еще одна ошибка, вы запускаете перемешивание внутри цикла, поэтому в основном вы каждый раз рандомизируете все ответы, попробуйте переместить это за пределы цикла for: $ match = $ question-> answers-> where (' is_key ', 0) -> shuffle () -> toArray (); также используйте здесь другую переменную $ random = $ match-> unique ();

latr.88 07.09.2018 21:23

@ latr.88 ->inRandomOrder() - это функция Query (Builder), но $question->answers->where(...) в этот момент является Collection, поэтому ->shuffle() верен; Версия Laravel здесь не имеет значения.

Tim Lewis 07.09.2018 21:42

Сначала получите все ответы:

$match = $question->answers->where('is_key', 0)->toArray();

Затем перемешайте его:

$match = shuffle($match);
->shuffle() - это метод на Collection, который по своей сути вызывает метод массива shuffle(), поэтому на самом деле это ничего не меняет.
Tim Lewis 07.09.2018 21:44

Другие вопросы по теме