
最近Smartyを使い始めた者です。
以下のような多次元配列を、$smarty->assign('data', $data); します。
$data =
array( [0] => array( [id] => 23 [comment] => 'aaa' [name] = array( [0] => 'xxx' [1] => 'yyy' ))
[1] => array( [id] => 24 [comment] => 'bbb' [name] = array( [0] => 'zzz' ))
[2] => array( [id] => 25 [comment] => 'ccc' [name] = array( [0] => 'ttt' [1] => 'uuu' ))
)
そして、以下のようなテーブルを表示させたいのです。
|-------------------|
| 23 | aaaa | xxxx |
| | |------|
| | | yyyy |
|-------------------|
| 24 | bbbb | zzzz |
|-------------------|
| 25 | cccc | tttt |
| | |------|
| | | uuuu |
|-------------------|
<td>タグのrowspan属性を使おうと思っています。
{foreach}をつかって、以下のようなものを書きましたが、駄目でした。
{foreach from=$data item=value01 name=kiji}
<tr>
<td rowspan="{$value01.numgoods}">{$value01.id}</td>
<td rowspan="{$value01.numgoods}">{$value01.comment}</td>
{foreach from=$value01 item=value02 name=goods}
{if $smarty.foreach.goods.first}
<td>{$value02.name.0]</td></tr>
{else}
<tr>
<td>{$value.name.1}</td>
</tr>
{/if}
{/foreach}
{/foreach}
エラー表示は、
syntax error: unrecognized tag: $value02.name.0 です
本当は、$value02.name の.0を三次元での要素数分だけ自動でループしてほしいのですが、その書き方がわかりません。
ネットをあさっても、これと言うサイトを見つけれません。
そもそも、三次元目の要素を取得するsmartyの方法がわかりません。
どなたかご教授の程、よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
細かい解説を書く時間がないんで、回答例だけ載せます。
<?php
require_once 'Smarty/libs/Smarty.class.php';
$data =
array(array( 'id' => 23, 'comment' => 'aaa', 'name' => array('xxx', 'yyy')),
array( 'id' => 24, 'comment' => 'bbb', 'name' => array('zzz' )),
array( 'id' => 25, 'comment' => 'ccc', 'name' => array('ttt', 'uuu' )));
$sm = new Smarty();
$sm->assign('data', $data);
$sm->display('testArray.tpl');
?>
<table border="1">
{foreach from=$data item='row'}
<tr>
<td rowspan={$row.name|@count}>{$row.id}</td>
<td rowspan={$row.name|@count}>{$row.comment}</td>
{assign var='trPrinted' value=1}
{foreach from=$row.name item='name'}
{if $trPrinted == 0}
<tr>
{else}
{assign var='trPrinted' value=0}
{/if}
<td>{$name}</td>
</tr>
{/foreach}
{/foreach}
</table>
肝は、@countで長さを取得している所、最後のカラムで<tr>を出すかどうかを、変数を使ってコントロールしている所です。
なお、Smartyでは、整数キーと、連想配列では、書き方が違います。
$a.key、$a[0]のように書き分けます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript console.logがどうしても2つ機能しないのでアドバイスをくださいお願いします 2 2022/07/07 22:13
- JavaScript 2段階プルダウンで1段階目の選択を終えた後に選択ボックスを見えなくしたい 2 2022/07/05 21:58
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
多次元配列を2次元の連想配列で...
-
ショッピングカートで$_SESSION...
-
フォルダ階層をHTMLTable化する...
-
MySQLのデータをPHPで多次元...
-
2次元配列のソート
-
再帰関数を用いて配列の合計を...
-
C言語の2次元配列における行・...
-
CArrayの要素としてCStringArra...
-
多次元配列の重複削除
-
openでcsvを開いた時
-
C言語のchar ポインタ
-
行列
-
charのポインタについて
-
mallocで char *型の配列を確...
-
【PHP】配列を連想配列に
-
C言語で全角文字の扱いについて
-
CArrayのソート
-
PHP初心者の質問object(stdClass)
-
【PHP】配列のキー名の修正は可...
-
$_SESSIONに二次元配列を使える...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
STLのvectorで作った配列をメン...
-
特定の文からメールアドレスの...
-
読み(あ行~わ行)ごとに分け...
-
配列の要素(value)に、変数を...
-
配列の添え字が小数だとどうなる?
-
Delphiで別unitで宣言した「TAr...
-
MYSQLとPHPによって取得する多...
-
verilogで、配列の一部をタスク...
-
多次元配列の重複削除
-
CArrayのソート
-
ファイルの書き込みについて教...
-
mallocで char *型の配列を確...
-
bashで配列から、特定の要素を...
-
array_intersectで空欄を比較し...
-
C言語 最大値と最小値を求めて...
-
pg_copy_fromの使い方について...
-
複数のforeachをまとめるには
-
2つの連想配列を比較して一致す...
-
array_mapの再帰処理がうまく行...
おすすめ情報