3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(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側は以下のようにしています。

{section name=iCnt loop=$aryInput}

{/section}

{$aryInput[iCnt].item} {$aryInput[iCnt].value}

さて、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}を使わないと行けないようです。

以下のようになります。

{foreach tem=nowItem key=nowKey from=$aryInput}

{/foreach}

{$nowItem.item} {$nowItem.value}

参考:

3流プログラマのメモ書き : (PHP)Smartyで連想配列をアサインした場合