关于php:如何在Laravel的foreach循环中跳过第一项?

How to skip first item in a foreach loop in Laravel?

我正在尝试根据存储在数据库中的内容在我的网页中填充内容。但是,我想跳过第一个项目;我想从第二个项目开始循环。

我怎样才能做到这一点?

1
2
3
4
5
6
7
8
9
10
11
12
13
@foreach($aboutcontent as $about)

   
     <img id="" class="img-responsive" src="images/{{ $about->aboutimg }}" alt="">
       
            {{ $about->aboutname }}
            <p>
{{ $about->aboutinfo }}
</p>
       
   

@endforeach


从laravel 5.4开始,无论何时在刀片文件中使用foreachfor,现在都可以访问$loop变量。$loop变量提供了许多有用的属性和方法,其中一个在这里非常有用,可以跳过第一次迭代。请参阅下面的示例,这是一种实现与其他旧答案相同结果的更清洁的方法:

1
2
3
4
@foreach ($rows as $row)
    @if ($loop->first) @continue @endif
    {{ $row->name }}<br/>
@endforeach

试试这个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@foreach($aboutcontent as $key => $about)
@if($key > 0){
   
       
         <img id="" class="img-responsive" src="images/{{ $about->aboutimg }}" alt="">
           
                {{ $about->aboutname }}
                <p>
{{ $about->aboutinfo }}
</p>
           
       
   
@endif;
@endforeach


假设$aboutcontents是数字数组,只需使用老式的for循环,而不是使用新的尖牙foreach

1
2
3
4
5
6
7
// Notice you start at 1 and your first
// elem is 0 so... ta da... skipped
@for ($i = 1; $i < count($aboutcontents); $i++){
    $about = $aboutcontents[$i]; //This is the object

    //now use $about as you would
}

注:我没有使用幼虫或刀片,但根据文件,这应该是可行的。


如果你想在刀刃上这样做,你需要某种计数器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php $count = 0;?>
@foreach
    @if($count>1)
       
           
             <img id="" class="img-responsive" src="images/{{ $about->aboutimg }}" alt="">
               
                    {{ $about->aboutname }}
                    <p>
{{ $about->aboutinfo }}
</p>
               
           
       
    @endif
    $count++
@endforeach

编辑:

我更喜欢马克·贝克在评论中给出的答案。

1
2
3
4
5
6
7
8
9
10
11
12
13
@foreach(array_slice($aboutcontent, 1) as $about)

   
     <img id="" class="img-responsive" src="images/{{ $about->aboutimg }}" alt="">
       
            {{ $about->aboutname }}
            <p>
{{ $about->aboutinfo }}
</p>
       
   

@endforeach


或者,您也可以在迭代之前从数组中移除第一个元素:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@php
    array_shift($aboutcontent);
@endphp
@foreach($aboutcontent as $about)

   
        <img id="" class="img-responsive" src="images/{{ $about->aboutimg }}" alt="">
       
            {{ $about->aboutname }}
            <p>
{{ $about->aboutinfo }}
</p>
       
   

@endforeach

优点是您不需要任何条件来验证在第一次迭代中您不是。缺点是,您可能需要同一视图中的第一个元素,但从您的示例中我们不知道。

注意,在将数据传递给视图之前,从数组中删除第一个元素可能更有意义。

有关参考,请参见:

  • http://php.net/manual/en/function.array-shift.php
  • https://laravel.com/docs/5.4/blade_php