人気ブログランキング | 話題のタグを見る
(PHP)Smartyで1次元目が連想配列をループするには{foreach}を使う
PHP側で当初下記のように2次元配列を作成していました。
array_pushを使って連想配列を、親の配列に追加しています。

$aryInput = array();
array_push($aryInput , array( "item"=>"hoge1" , "value"=> "aaa" ));
array_push($aryInput , array( "item"=>"hoge2" , "value"=> "bbb" ));
array_push($aryInput , array( "item"=>"hoge3" , "value"=> "ccc" ));


上記$aryInputをprint_rすると以下のようになってます。
1次元目は数値になっており通常配列ですね。

Array
(
[0] => Array
(
[item] => hoge1
[value] => aaa
)

[1] => Array
(
[item] => hoge2
[value] => bbb
)

[2] => Array
(
[item] => hoge3
[value] => ccc
)
)


Smarty側は以下のようにしています。

<table>
{section name=iCnt loop=$aryInput}
<tr>
<td>{$aryInput[iCnt].item}</td>
<td>{$aryInput[iCnt].value}</td>
</tr>
{/section}
</table>


さて、PHP側で下記のように修正しました。

$aryInput = array();
$aryInput["test1"]= array( "item"=>"hoge1" , "value"=> "aaa" );
$aryInput["test2"]= array( "item"=>"hoge2" , "value"=> "bbb" );
$aryInput["test3"]= array( "item"=>"hoge3" , "value"=> "ccc" );


これを上記の{section}を使ったSmartyテンプレートを使うと以下のようなエラーになりました。

Notice: Undefined offset: 0 in D:\xxx\xxx\smarty\templates_c\5032d4263eae4c4f601f38de8f52e810499466ff.file.xxx.tpl.php on line 100


$aryInputをprint_rすると以下のようになってます。
1次元目が連想配列のため文字列となっていますね。

Array
(
[test1] => Array
(
[item] => hoge1
[value] => aaa
)

[test2] => Array
(
[item] => hoge2
[value] => bbb
)

[test3] => Array
(
[item] => hoge3
[value] => ccc
)
)



{foreach},{foreachelse} | Smartyをみると、連想配列の場合でループするには{foreach}を使わないと行けないようです。
以下のようになります。

<table>
{foreach tem=nowItem key=nowKey from=$aryInput}
<tr>
<td>{$nowItem.item}</td>
<td>{$nowItem.value}</td>
</tr>
{/foreach}
</table>


参考:
3流プログラマのメモ書き : (PHP)Smartyで連想配列をアサインした場合
by Jehoshaphat | 2012-05-13 21:20 | PHP開発 | Comments(0)


<< (PHP)セッション削除の話 (PHP)セッションを使ってて... >>