みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

smartyのforeachの使い方がよくわかりません。

Smartyを使ってサイトを作っていて連想配列でネストしている配列を{section}でループさせています。
はじめの配列はうまく取り出せてループできるのですが、ネストした配列の中身を取得して表示させることができません。{section}内でさらに配列の要素をループさせたい場合どのようにしたらよいのでしょうか?
print_rの結果はこんな感じです。[test] => Arrayの配列を取り出したいのですがどのようにしたらよいでしょうか?
Array ( [0] => Array ( [id] => 7 [postdate] => 2008/02/21/ 06:48:10 [count] => 0 [test] => Array ( [0] => Array ( [id] => 4 [title] => あああああああああ) [1] => Array ( [topicid] => 6 [postdate] => 2008/02/19/ 13:44:41

投稿日時 - 2008-02-22 20:34:51

QNo.3800179

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

{foreach}も{section}もネスト可能で、あまり使い方は変わりません。

{* 1 *}
{foreach item=item from=$arr}
{$item}
{/foreach}

{* 2 *}
{section name=name loop=$arr}
{$arr[name]}
{/section}

1と2は同じ出力結果です。

質問にある配列も{section}{foreach}どちらを使用してもかまわないと思いますが、
{foreach item=item from=$arr key=$key}
とすると、{$key}でkeyの値を表示できますので、1つの連想配列の場合は{foreach}の方が便利な印象です。
#1さんがおっしゃるように{foreach}を使用した方が簡単な文になります。

{section loop=$arr name=arr_key}
{foreach item=test_arr key=key from=$arr[arr_key].test}
{foreach item=test_item key=test_key from=$test_arr}
・{$test_key}:{$test_item}<br>
{/foreach}
<br>
{/foreach}
<br>
{/section}


***** 出力 *****

・id:4
・title:あああああああああ

・topicid:6
・postdate:2008/02/19/ 13:44:41

投稿日時 - 2008-02-23 01:04:17

ANo.1

{section} ではなく、{foreach}を使ってください
感覚としては、PHPのforeachと同じです
何階層でも、お好きなくらいネストしていってください


{foreach name=outer item=contact from=$contacts}
<hr />
{foreach key=key item=item from=$contact}
{$key}: {$item}<br />
{/foreach}
{/foreach}

投稿日時 - 2008-02-22 21:19:54

あなたにオススメの質問