質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

2回答

2060閲覧

laravelの$loop->firstについて

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/06/14 07:39

編集2019/06/14 07:54

$loop->firstは最初の繰り返しかどうかをみると書いてあったのですが、
@foreachで$data = ['one', 'two', 'three', 'four', 'five'];の'one'が呼び出されたときに実行されるということですか?
もしそうであれば'one'は@if ($loop->first)を通り、@endifには'one'の値がよびだされず以下のような出力になると思いました。($loop->lastも)

※データ一覧
No,2. two
No,3. three
No,4. four
--ここまで

しかし、出力結果はこうでした。

※データ一覧
No,1. one
No,2. two
No,3. three
No,4. four
No,5. five
--ここまで

これは、'one'が呼び出される前に@if ($loop->first)が通り、'five'が通ったあとに@if ($loop->last)が通っている認識でいいのでしょうか?

php

1// resources/views/hello/index.blade.php 2 3<html> 4<head> 5 <title>Hello/Index</title> 6</head> 7<body> 8 <h1>Blade/Index</h1> 9 <p>&#064;forディレクティブの例</p> 10 @foreach ($data as $item) 11 @if ($loop->first) 12 <p>※データ一覧</p><ul> 13 @endif 14 <li>No,{{$loop->iteration}}. {{$item}}</li> 15 @if ($loop->last) 16 </ul><p>--ここまで</p> 17 @endif 18 @endforeach 19</body> 20</html>

php

1// app/Http/Controllers/HelloController.php 2 3<?php 4 5namespace App\Http\Controllers; 6 7use Illuminate\Http\Request; 8use Illuminate\Http\Response; 9 10class HelloController extends Controller 11{ 12 public function index() 13 { 14 $data = ['one', 'two', 'three', 'four', 'five']; 15 return view('hello.index', ['data'=>$data]); 16 } 17}

php

1// routes/web.php 2 3<?php 4 5Route::get('hello', 'HelloController@index');

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ちゃんと動いているから**※データ一覧が一回しか書かれていないのだ
質問文に書いてあるような動きにしたいなら
@else**を使ってそれにあわせてhtml書くのです

投稿2019/06/14 07:50

hentaiman

総合スコア6415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/06/14 08:10

回答ありがとうございます!
guest

0

ベストアンサー

「今、何回目のループか(最初/最後の回かどうか)」という認識でいいと思います。
今のコードを1行ずつ動作を追っていくと、こんな感じ。

@foreach ($data as $item):ループに入る。1回目スタート。
@if ($loop->first) 〜 @endif:1回目(最初)なので条件を満たしている。「※データ一覧」表示。
<li>No,{{$loop->iteration}}. {{$item}}</li>:[0]のデータを表示。
@if ($loop->last) 〜 @endid:条件を満たしていないので何もしない。
@endforeach:残りがあるのでループを続ける。

@foreach ($data as $item):2回目スタート。
@if ($loop->first) 〜 @endif:条件を満たしていないので何もしない。
<li>No,{{$loop->iteration}}. {{$item}}</li>:[1]のデータを表示。
@if ($loop->last) 〜 @endid:条件を満たしていないので何もしない。
@endforeach:残りがあるのでループを続ける。

〜省略〜

@foreach ($data as $item):5回目スタート。
@if ($loop->first) 〜 @endif:条件を満たしていないので何もしない。
<li>No,{{$loop->iteration}}. {{$item}}</li>:[4]のデータを表示。
@if ($loop->last) 〜 @endid:5回目(最後)なので条件を満たしている。「--ここまで」を表示。
@endforeach:残りが無いのでループ終了。

なのでNo.1とNo.5を非表示にしたかったら、<li>No〜</li>の行も@ifで制御する必要がありますね。

投稿2019/06/14 08:00

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/06/14 08:10

処理の内容がごっちゃになっていたのですが丁寧に書いていただき理解できました!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問