【问题标题】:How to check matches between 2 arrays with foreach in laravel blade?如何在 laravel 刀片中使用 foreach 检查 2 个数组之间的匹配?
【发布时间】:2016-05-19 10:13:37
【问题描述】:

我的数据库中有一组标签。我还附上了当前项目的标签。我想检查标签是否已经附加。这似乎可行,但是当最初附加超过 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 数组:

 {"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->标签数组

[{"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}}]

【问题讨论】:

  • 你能举出两个数组的数据和你目前得到的输出的例子吗?我想这里的问题是您没有可用于查找标签名称的密钥
  • 只是想确认您不想要任何重复记录吗?
  • 没错没错,这其实是更新当前物品标签

标签: php laravel foreach


【解决方案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>
            <?php continue 2; ?>
        @endif
    @endforeach
    <option value="{{$name}}">{{$name}}</option>
@endforeach

【讨论】:

  • 这似乎有效!我很想知道这是如何工作的:)
【解决方案2】:

我可能是错的,你的问题仍然有点令人困惑,但我认为下面的代码应该可以做到:

<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>

基本上,您要检查的只是名称属性已经在标签数组中,因此您只需要使用in_array 来检查标签数组是否具有该值

【讨论】:

    【解决方案3】:

    我认为这是@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>
    

    【讨论】:

      猜你喜欢
      • 2015-12-15
      • 2016-06-29
      • 2017-06-20
      • 2017-10-22
      • 2019-07-30
      • 2019-08-23
      • 1970-01-01
      • 2017-08-06
      • 1970-01-01
      相关资源
      最近更新 更多