【freo】【freo講座】【初心者の為のfreoテンプレート編集講座】【基本編(10)】foreachについて
今回は、<!--{if}-->~<!--{/if}-->の条件式と同様にfreoのテンプレート上でよく使われている<!--{foreach}-->~<!--{/foreach}-->について説明します。
foreachとは
基本編(3)の「smartyとは」の項目で、smartyを使うと配列の繰り返しが利用できると説明しました。
foreachとはsmartyの構文の一つで、これを使うと配列を繰り返して表示することができます。
ちなみに、foreachは「フォーイーチ」と読むそうです。最初フォリーチだと思ってました。どうでもいいですね。
foreachの基本的な機能としては、
- 配列の値の回数分<!--{foreach}-->~<!--{/foreach}-->で挟まれた部分を繰り返す
- 配列の値を取得する
- 配列のキーを取得する
以上の通りです。
他にも、foreach自体に名前をつけたり、繰り返しの回数を表示したりできますが、とりあえず基本的なことだけ解説します。
さて、foreachの基本的な書き方は以下の通りです。
繰り返したい処理
<!--{/foreach}-->
このように書くと、「繰り返し処理の中で行う処理」をfromで設定した配列の中にある値の個数分の回数で、繰り返して表示することができます。
これだけだと意味が分からないので、具体的に例を出して説明します。
配列の値を繰り返し表示する
まずは、こちらの表を見てください。
果物 | $fruits |
apple | リンゴ |
orange | ミカン |
grape | ブドウ |
上の表は、基本編(8)配列についてで紹介した果物の連想配列です。
$fruitsという連想配列の変数に、「リンゴ」・「ミカン」・「ブドウ」という三つの値が格納されています。
リンゴ、ミカン、ブドウの値をそれぞれ表示したいときは、{$fruits.apple}{$fruits.orange}{$fruits.grape}と書けばOKです。
しかし、今のところは3つしか値が入っていないからまだいいものの、これがたとえば100個とか1000個とかの値が入っているときに、いちいち一つずつ変数を書くのは非常に面倒です。
そこで、foreachを使ってみます。
<p>
<!--{foreach from=$fruits item=fruit}-->
「{$fruit}」<br />
<!--{/foreach}-->
</p>
とりあえず、このように書いてみました。
上記を例にしながら、書き方を説明します。
「from=$配列の変数名」の箇所は、どの配列をforeachつまり繰り返すかを定義しています。
今回は$fruits配列を繰り返すので、「$fruits」と書いています。
「$」を忘れないようにしてください。
「item=foreachの中で値を表示するための任意の変数名」部分では、<!--{foreach}-->~<!--{/foreach}-->の中で配列の値を表示するときに使う変数名を新たに定義しています。
<!--{foreach}-->~<!--{/foreach}-->の中でだけ利用する変数名なので、名前はなんでもかまいません。
今回は仮に「fruit」としています。
ここでは、「$」ははずしてください。
「繰り返したい処理」についてですが、今回は値を単純に並べたいだけなので、とりあえず変数名にカギカッコをつけて改行しています。
この「{$fruit}」とは、itemで定義した任意の変数名をそのまま引用しています。
さて、このようにforeachを使うと、「繰り返したい処理」が配列変数の値の回数分繰り返されます。
また、itemで決めた変数部分(今回は$fruit)に「リンゴ」「ミカン」「ブドウ」という値が一度ずつ代入されて表示されます。
よって、ブラウザでどのように表示されるかというと、
「リンゴ」
「ミカン」
「ブドウ」
となります。
また、これをリストであらわしたいなら、
<!--{foreach from=$fruits item=fruit}-->
<li>{$fruit}</li>
<!--{/foreach}-->
</ul>
と書けばOKです。
繰り返しになりますが、<!--{$foreach}-->~<!--{/foreach}-->で挟まれた部分が繰り返し表示されるので、タグが閉じてあるかなど気をつけるようにしてください。
配列のキーを取得する
foreach構文で必須なのは、「from」と「item」です。
fromでどの連想配列かを設定し、itemで値を表示するためのforeach用の変数を決めれば、foreachは成立します。
しかし、foreach構文で取得できるのは、値だけではありません。
連想配列のキー名も取得できます。
どう書くかというと、
繰り返したい処理
<!--{/foreach}-->
このようにします。
keyに変数名を書くときは、itemのときと同様、「$」を抜くのを忘れないようにしてください。
ためしに果物の配列でキーを取得しようとすると、
<p>
<!--{foreach from=$fruits item=fruit key=fruitkey}-->
{$fruitkey}:「{$fruit}」<br />
<!--{/foreach}-->
</p>"
こうなります。
ブラウザでは以下のように表示されます。
apple:「リンゴ」
orange:「ミカン」
grape:「ブドウ」
foreachelseについて
{foreachelse}を使って、配列に値が入っていなかった場合の処理を定義することができます。
繰り返したい処理
<!--{foreachelse}-->
配列に値が入っていなかった場合の処理
<!--{/foreach}-->
このように記載することによって、配列に値が入っていなかった時の表示を指定することができます。
foreachのその他の機能
さて、foreachには、
- 配列の値の回数分<!--{foreach}-->~<!--{/foreach}-->で挟まれた部分を繰り返す
- 配列の値を取得する
- 配列のキーを取得する
という機能の他に、以下の機能もあります。
- foreachに名前をつける
- 何回目の繰り返しなのかを表示する機能
- 最初と最後の繰り返しの時に表示を変える機能
- トータルで何回繰り返したのかを表示する機能
これらの機能は、smartyの公式サイトなどで紹介されていますが、とりあえず知らなくても大丈夫そうなので、こういうのもあるよってことだけご紹介しておきます。
参考になりそうなリンクはこちら
smary:{foreach},{foreachelse}
PHP Book:繰り返し処理
PHP Labo:smartyの利用
10press:【smarty】foreachでループした最初の要素の表示