У меня проблема.
У меня есть такой код:
<?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.
Как сделать цифры уникальными при перемешивании?






Попробуйте использовать inRandomOrder ()
$match = $question->answers->where('is_key', 0)->inRandomOrder()->toArray();
он говорит, что Метод inRandomOrder не существует.
Какую версию Laravel вы используете, она существует, смотрите здесь laravel.com/docs/5.7/queries#ordering-grouping-limit-and-off установить
Просто проверьте, и вы правы, не работает с отношениями посередине
Нет, это не работает, я обновил свой laravel, но по-прежнему нет другого пути?
Я думаю, что есть еще одна ошибка, вы запускаете перемешивание внутри цикла, поэтому в основном вы каждый раз рандомизируете все ответы, попробуйте переместить это за пределы цикла for: $ match = $ question-> answers-> where (' is_key ', 0) -> shuffle () -> toArray (); также используйте здесь другую переменную $ random = $ match-> unique ();
@ latr.88 ->inRandomOrder() - это функция Query (Builder), но $question->answers->where(...) в этот момент является Collection, поэтому ->shuffle() верен; Версия Laravel здесь не имеет значения.
Сначала получите все ответы:
$match = $question->answers->where('is_key', 0)->toArray();
Затем перемешайте его:
$match = shuffle($match);
->shuffle() - это метод на Collection, который по своей сути вызывает метод массива shuffle(), поэтому на самом деле это ничего не меняет.
Работает ли при звонке
->shuffle()->unique()->toArray()? Что содержит$question->answers? (Это будетCollectionчего-то, в зависимости от->unique()может потребоваться дополнительный параметр)