電子書籍の厳選無料作品が豊富!

お世話になります。

以下のような多次元配列があり、以下のようなリストを表示させたいのですが。

$data =
array( [0] => array( [date] =>'2008-04-13'
[title] => array( [0] =>'aaaaaa'
[1] =>'bbbbbb'
[2] =>'cccccc'
)
[id] => array( [0] => 23
[1] => 24
[2] => 25
)
)
[1] => array([date] =>'2008-03-03'
[title] => array( [0] =>'ddddd'
[1] =>'eeeee'
[id] => array( [0] => 21
[1] => 22
)
)
)
$smarty->assign('data', $data);

こんなリストにしたい。
2008-04-13
23---aaaaaa
24---bbbbbb
25---cccccc
2008-03-03
21---dddddd
22---eeeeee

テンプレート側で下記のコーディングを試みましたが、だめでした。
{foreach from=$data item=value01 }
<dt>{$value01.date}</dt>

{foreach from=$value01 item=value02 }
<dd>{$value02.id}---{$value02.title}</dd>
{/foreach}
{/foreach}
結果
2008-04-13
2
2008-03-03
2
となりました。
ネストしたループをそれぞれの id または title の要素数だけループさせるにはどうしたらよいでしょうか。

どなたかご教授の程、よろしくお願いします。

A 回答 (2件)

確かに、特徴的かも。


どうも、継ぎはぎで作った感が否めませんね。

Smartyの本も出てますが、やはり最後はマニュアルでしょう。
カスタマイズの辺りは結構面白いです。

sectionは、添え字を抜き出しますので、複数の配列を1つのループの中で扱えます。foreachは、配列を要素に分解しますので、他の配列を同時には分解できません。

この問題に関しては、与えるデータの構造を変えて、foreachで回した方がスマートでは?

$data =array(
  array('date' =>'2008-04-13',
     array(
       array('title' => 'aaaaaa', 'id' => 23),
       array('title' => 'bbbbbb', 'id' => 24),
       array('title' => 'cccccc', 'id' => 25))),
  array('date' =>'2008-03-03',
     array(
       array('title' => 'dddddd', 'id' => 21),
       array('title' => 'eeeeee', 'id' => 22))))

括弧、あってるかな?
    • good
    • 0
この回答へのお礼

やはりそうですか。
でも使いこなせばとても便利なものなんですね。

ありがとうございました。

お礼日時:2008/04/30 00:00

{foreach from=$data item=value01 }


<dt>{$value01.date}</dt>
{section loop=$value01.id name='i'}
<dd>{$value01.id[i]}---{$value01.title[i]}</dd>
{/section}
{/foreach}

sectionを使えばできます。
    • good
    • 0
この回答へのお礼

また、参考になる回答をありがとうございました。

Smartyの文法は特徴的ですね。そんなことはないですか?

Smartyはまだ勉強し始めでわかってないことが多いのですが、www.smarty.net/manual/ja/ ですべて勉強できますか?

他に参考になるサイトをご教示いただけたら幸いです。

お礼日時:2008/04/28 09:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!