Smartyで{$配列名|@key}
のような記述に出くわしたので、その機能を記しておきます。
バージョン
php 5.6.15
Smarty 3.1.28
Smartyの修飾子
ここでの@key
は、$配列名
(主に連想配列)内の、その時点で内部ポインタが指し示している要素のキー名を返します。
Smartyでは、変数と|
(パイプ、縦線、縦棒)の右側に書かれている文言を修飾子と言い、Smartyで標準で用意されているライブラリ関数や、php関数を修飾子として適用できるのでした。
また@
(アットマーク)を用いることで、要素一つ一つではなく配列全体に修飾子を作用させることができます。
(参考:http://www.smarty.net/docsv2/ja/language.modifiers.tpl)
たとえば、phpファイル側で
<?php
$smarty->assign("$fruit", array("apple" => "リンゴ", "orange" => "ミカン", "grape" => "ブドウ");
$smarty->display('hello.tpl');
?>
のように連想配列がSmarty側に渡されたとき、
{$fruit|@key}<br>
{while $fruit|@next}
{$fruit|@key}<br>
{/while}
とすると、画面に以下のようにキー名が出力されます。
apple
orange
grape
phpのkey関数:http://php.net/manual/ja/function.key.php
phpのnext関数:http://php.net/manual/ja/function.next.php
ちなみに、foreach文内で修飾子key
を適用しても、foreachの中で複製した新たな配列をループさせているので、
{foreach from=$fruit item=item}
{$fruit|@key}<br>
{/foreach}
上のように$fruit
にkey
を作用させても同じ値が返ってきます。
apple
apple
apple
おまけ
配列の修飾子の前に付ける@
ですが、今のバージョンでは@
を付けなくても配列全体に作用するようです。
{$fruit|@count}<br>
{$fruit|count}<br>
いずれも要素数3が返ってきます。
3
3
ただ、あくまで配列に作用させたいということを明示するためにも、@
は付けたほうが良さそうですね。
過去のバージョンでの表示結果については以下を参照。
http://www.phppro.jp/phptips/archives/vol26/1