У меня есть массив тегов из моей базы данных. Я также добавил теги из текущего элемента. Я хочу проверить, что теги уже прикреплены или нет. Кажется, что это работает, но, конечно, я получаю повторяющиеся элементы в своем поле выбора, когда первоначально было добавлено более 1 тега. Как я могу избежать этого?
<select name="tags" multiple required> @foreach ($tags as $name) @foreach($item->tags as $itemtag) @if($name == $itemtag->name) <option value="{{$name}}" selected>{{$name}}</option> @else <option value="{{$name}}">{{$name}}</option> @endif @endforeach @endforeach </select>
$ tags array:
{"9":"Acoustic","3":"Angry","6":"Autumn","10":"Banjo","13":"Bass","14":"Cheerful","12":"Chill","35":"Dirty","8":"Electric","22":"Epiphone","24":"ESP","19":"Fender","33":"Funk","16":"Funny","18":"Gibson","30":"Gretsch","32":"Groovy","1":"Happy","20":"Ibanez","23":"Jackson","31":"Les Paul","28":"Martin","15":"Mellow","21":"Paul Reed Smith","27":"Redwood","2":"Sad","29":"Schecter","17":"Sleepy","34":"Spanish","7":"Spring","4":"Summer","26":"Taylor","11":"Ukulele","5":"Winter","25":"Yamaha"}
массив $ loop-> tags :
[{"id":1,"created_at":null,"updated_at":null,"name":"Happy","pivot":{"FK_loop_id":2,"FK_tag_id":1}},{"id":4,"created_at":null,"updated_at":null,"name":"Summer","pivot":{"FK_loop_id":2,"FK_tag_id":4}},{"id":14,"created_at":null,"updated_at":null,"name":"Cheerful","pivot":{"FK_loop_id":2,"FK_tag_id":14}},{"id":9,"created_at":null,"updated_at":null,"name":"Acoustic","pivot":{"FK_loop_id":2,"FK_tag_id":9}}]
Это должно работать:
<select name="tags" multiple required> @foreach ($tags as $name) @foreach($item->tags as $itemtag) @if($name == $itemtag->name) <option value="{{$name}}" selected>{{$name}}</option> <?php continue 2; ?> @endif @endforeach <option value="{{$name}}">{{$name}}</option> @endforeach
Возможно, я ошибаюсь, ваш вопрос все еще немного запутан, но следующий код должен сделать это, я думаю:
<select name="tags" multiple required> @foreach($item->tags as $itemtag) @if(in_array($itemtag->name, $tags)) <option value="{{$name}}" selected>{{$name}}</option> @else <option value="{{$name}}">{{$name}}</option> @endif @endforeach </select>
В основном все, что вы хотите проверить, это то, что свойство name уже находится в массиве тегов, поэтому вам просто нужно использовать in_array, чтобы проверить, имеет ли массив тегов это значение
Как я думаю, это хорошая поддержка, предоставляемая @Sofiene DJEBALI
У меня есть 1 предложение для этого, используя мое предложение, вы можете завершить это только одним foreach
– Обновите свой запрос и получите только имя с помощью функции pluck (); чем ваш результат запроса может выглядеть так: $ itemtag = array (Acoustic, Cheerful, Happy, Summer);
Я уверен, что требуется меньше времени на обработку
<select name="tags" multiple required> @foreach($tags as $key => $name) <option value="{{$key}}" <?php echo in_array($name, $itemtag)?'selected':'';?>> {{$name}} </option> @endforeach </select>