キーを取得
{foreach}関数はPHPスクリプトで記述された連想配列を1つ1つ取り出して処理します。前のページでは連想配列の値を取り出していましたが、連想配列のキーを取得することも出来ます。書式は次の通りです。
{foreach from=配列変数 item=要素を格納する変数 key=キーを格納する変数}
繰り返し処理の中で行う処理
{/foreach}
「key」属性には配列のキーを格納する変数名を記述します。
具体的な例を元に考えてみます。まずPHPスクリプト側で次のような連想配列が渡されてきた場合で考えます。
$data = array(
"name"=>"Yamada",
"old"=>"24",
"address"=>"Tokyo"
);
$smarty->assign('personaldata', $data);
テンプレート側では各キーを「keyname」と言う変数に格納するようにしてみます。
{foreach from=$personaldata item=var key=keyname}
{/foreach}
「item」属性の場合と同じく「key」属性にも変数名だけ($は付けない)を記述します。
繰り返しが行われるたびに要素の値を「item」属性に指定した変数に格納します、そしてキーの値を「keyname」属性に指定した変数に格納します。ここでは繰り返しの度にキーと要素を出力するようにしてみます。
{foreach from=$personaldata item=var key=keyname}
<p>キー:{$keyname}</p>
<p>要素:{$var}</p>
{/foreach}
渡されてきた配列は3つの要素を持っていましたので繰り返し処理は3回行われます。繰り返しが行われる度に変数{$var}には「Yamada」「24」「Tokyo」と言う値が格納され、変数{$keyname}には「name」「old」「address」という値が格納されますので結果として次のような出力が行われます。
<p>キー:name</p> <p>要素:Yamada</p> <p>キー:old</p> <p>要素:24</p> <p>キー:address</p> <p>要素:Tokyo</p>
サンプルプログラム
では簡単なサンプルプログラムを作成して試してみます。
<?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('sample2-1.tpl');
?>
上記を「sample2-1.php」の名前で「(Apacheドキュメントルート)¥smarty¥foreach」に保存します。
{* Smarty foreach/sample2-1.tpl *}
<html>
<head>
<title>Smarty Test</title>
</head>
<body>
<h1>{$title}</h1>
{foreach from=$personaldata item=var}
<p>キー:{$keyname}, 要素:{$var}</p>
{/foreach}
</body>
</html>
上記を「sample2-1.tpl」の名前で「D:¥smartysample¥foreach¥templates」に保存します。
そしてブラウザから「http://localhost/smarty/foreach/sample2-1.php」へアクセスして下さい。
配列に含まれる要素に加えてキーも取得できました。
( Written by Tatsuo Ikura )
PHPBook