@Coddee.

Unity/C#とか、PHP/MySQLとか。ぺーぺーがプログラムの備忘録も兼ねて。

【PHP/Smarty】配列の使い方

だいぶ前に作られたプログラムを触る機会があって、ちょっと「?」となったので備忘録。

Smarty」?なにそれ?

{* // 触ったコードはこんな感じ *}
{* // file.tpl.html *}
{foreach from=$cojp_member_data.zip_data key=member_key item=member_item}
    <p>{$member_key | escape:'html'}<span{if $member_item.zip_code eq 12}class="fontRed"{else}class="fontBlue"{/if}>{$member_item.zip_name | escape:'html'}</span></p>
{/foreach}

HTMLファイルに見たことのないコードが...
こんなのがめちゃめちゃ並んでて、もうわけわからん…
調べてみると、下記のようなことをやってます。

<?php
foreach($cojp_member_data["zip_data"] as $member_key => $member_item)
{
    if($member_item["zip_code"] == 12)
    {
        echo "<p><span class='fontRed'>";
        echo $member_item["zip_name"];
        echo "</span></p>";
    }
    else
    {
        echo "<p><span class='fontBlue'>";
        echo $member_item["zip_name"];
        echo "</span></p>";
    }
}
?>

ちょっと前のテンプレートエンジンなんだとか

PHPファイルで生成した値を、テンプレートファイルに表示させるやり方の一つに、Smartyエンジンってのが使われていたらしい。
PHPファイルの中に、こんなのがあったのがまさにそれ。

// これがテンプレートファイルに「アサインする」ってこと
$smarty->assign("cojp_member_data", $cojp_member_data);

配列cojp_member_dataを、指定のテンプレートファイルに"cojp_member_data"って変数でアサインする。
そうすることで、テンプレートファイルでは、

{* アサインした変数名に「$」を書いて使用 *}
{* カーリーブラケット「{}」で囲むのがポイント *}
{$cojp_member_data}

こんな感じで使っていく。

配列の場合、ブラケットで要素を指定するのではなく「.」で指定

{$cojp_member_data.zip_code}
{* echo $cojp_member_data["zip_code"]; とやりたいことは一緒 *}

このようにドットで展開していくようになる。
また、二次元、三次元となった場合は、第2,第3要素もドットで展開していく。

{$cojp_member_data.zip_code.12.name}
{* echo $cojp_member_data["zip_code"][12]["name"]; とやりたいことは一緒 *}

これにすんごい迷った...
CodeIgniterとか、CakePHPとかが出てくる前は、これが主流だったみたいだけど、
そのときは、まだプログラムの「プ」も知らない学生だったからなあ。
一応、備忘録に。