(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}
{$aryInput[iCnt].item} {$aryInput[iCnt].value} {/section}
さて、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}
{$nowItem.item} {$nowItem.value} {/foreach}
参考: