{foreach}関数

広告

{foreach}関数は記述したPHPスクリプトから渡されてきた連想配列を1つ1つ取り出して処理する場合に使用されます。基本的な書式は次の通りです。

{foreach from=配列変数 item=要素を格納する変数}
  繰り返し処理の中で行う処理
{/foreach}

{foreach}関数は{foreach}と{/foreach}をペアで使用します。

{foreach}関数では2つの必須な属性が定められています。まず「from」属性には繰り返し処理の対象となる配列の値が格納された変数を記述します。次に「item」属性には配列の要素を格納する変数名を記述します。

具体的な例を元に考えてみます。まずPHPスクリプト側で次のような連想配列が渡されてきた場合で考えます。

$data = array(
             "name"=>"Yamada",
             "old"=>"24",
             "address"=>"Tokyo"
             );
$smarty->assign('personaldata', $data);

テンプレート側では各要素を「var」と言う変数に格納するようにしてみます。

{foreach from=$personaldata item=var}

{/foreach}

ここで注意して欲しいのは「from」属性には変数を記述しますが。「item」属性には変数名だけ($は付けない)を記述するということです。

繰り返し処理は「from」属性に指定した配列変数に格納されている要素数だけ繰り返します。そして繰り返しが行われるたびに要素の値を「item」属性に指定した変数に格納します。ここでは繰り返しの度に要素を出力するようにしてみます。

{foreach from=$personaldata item=var}
<p>要素:{$var}</p>
{/foreach}

渡されてきた配列は3つの要素を持っていましたので繰り返し処理は3回行われます。繰り返しが行われる度に変数{$var}には「Yamada」「24」「Tokyo」と言う値が格納されますので結果として次のような出力が行われます。

<p>要素:Yamada</p>
<p>要素:24</p>
<p>要素:Tokyo</p>

{foreach}関数の最も基本的な使いかたは以上のようになります。

サンプルプログラム

では簡単なサンプルプログラムを作成して試してみます。

sample1-1.php

<?php

require_once('Smarty.class.php');

$smarty = new Smarty();

$smarty->template_dir = 'd:/smartysample/foreach/templates/';
$smarty->compile_dir  = 'd:/smartysample/foreach/templates_c/';
$smarty->config_dir   = 'd:/smartysample/foreach/configs/';
$smarty->cache_dir    = 'd:/smartysample/foreach/cache/';

$smarty->assign('title', '繰り返し処理のテスト');
$data = array(
             "name"=>"Yamada",
             "old"=>"24",
             "address"=>"Tokyo"
             );
$smarty->assign('personaldata', $data);

$smarty->display('sample1-1.tpl');

?>

上記を「sample1-1.php」の名前で「(Apacheドキュメントルート)¥smarty¥foreach」に保存します。

sample1-1.tpl

{* Smarty foreach/sample1-1.tpl *}
<html>
<head>
<title>Smarty Test</title>
</head>
<body>

<h1>{$title}</h1>
{foreach from=$personaldata item=var}
<p>要素:{$var}</p>
{/foreach}

</body>
</html>

上記を「sample1-1.tpl」の名前で「D:¥smartysample¥foreach¥templates」に保存します。

そしてブラウザから「http://localhost/smarty/foreach/sample1-1.php」へアクセスして下さい。

{foreach}関数

配列に含まれる要素の数だけ繰り返し処理が行われ画面出力されていることが確認できました。

( Written by Tatsuo Ikura )