【问题标题】:Using in_array on collections在集合上使用 in_array
【发布时间】:2016-11-01 11:38:00
【问题描述】:

我需要检查名称数组中的名称,但我无法将数组而不是集合传递给 in_array() 方法。

我的刀片代码看起来像这样

@foreach($ecn->areas as $area)
{{ $area->area }}:<br>
<ul>
    @foreach($area->people as $person)                              
        @if(in_array($person, $ecn->signatures->name ))
        <li><del>{{ $person }}</del></li>
        @else
        <li>{{ $person }}</li>
        @endif
    @endforeach
</ul>
@endforeach

我知道我的问题在于我试图访问签名列表的方式。

@if(in_array($person, $ecn->signatures->name ))

我可以在页面的另一部分访问它们

@foreach($ecn->signatures as $signature)
{{ $signature->name }}<br>
@endforeach

一切都很好。

在这种情况下,我如何访问签名列表并将其作为数组传递?

【问题讨论】:

    标签: php laravel eloquent laravel-5.2


    【解决方案1】:

    如果你想为 Laravel Collections 使用 in_array() 版本,那么你可以使用:

    $collection->contains($needle)
    

    就像in_array 一样。

    如果$needle 是整数,例如id,别忘了先采摘,像这样:

    $collection->pluck('id')->contains($needle)
    

    【讨论】:

      【解决方案2】:

      您可以对签名集合使用listspluck 方法来获取所有名称的新集合。从那里,您可以对集合使用contains() 方法,也可以使用all() 方法将集合转换为数组并直接使用in_array

      我建议在 foreach 循环之外执行此操作,这样您就不会在每次迭代时都生成这个新集合和数组。

      数组:

      // controller
      $names = $ecn->signatures->lists('name')->all();
      
      // blade
      @if(in_array($person, $names))
      

      收藏:

      // controller
      $names = $ecn->signatures->lists('name');
      
      // blade
      @if($names->contains($person))
      

      您也可以将contains() 与闭包一起使用,这样您就可以避免创建中间集合,但它有点难以阅读:

      包含有闭包:

      // blade
      @if($ecn->signatures->contains(function ($key, $value) use ($person) {
          return $value->name == $person;
      }))
      

      【讨论】:

        【解决方案3】:

        根据 Laravel 文档

        get 方法返回一个结果数组,其中每个结果都是 PHP StdClass 对象的一个​​实例。

        因此,您必须将 stdClass 对象转换为控制器本身中的数组。

        foreach ($ecn->signatures as $signature) 
             $nameArray[] = $signature->name;
        

        然后你可以在刀片模板中使用 in_array

        @if(in_array($person, $nameArray))
        

        【讨论】:

          猜你喜欢
          • 2017-04-06
          • 1970-01-01
          • 2023-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多