質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

Q&A

解決済

1回答

1937閲覧

Smary3で多次元配列(2次元目は連想)をforeachを使用して出力したい。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Smarty

Smartyは、PHPアプリケーションで使用されるテンプレートエンジンです。

0グッド

0クリップ

投稿2018/02/14 02:52

編集2018/02/14 03:09

前提・実現したいこと

学習歴が浅く質問の仕方がおかしい箇所があるかもしれません。
PHPのプログラム内で作成した下記のような3次元配列(2次元目が連想)を
Smarty3でforeachを使用して出力したいのですがうまくいかずに困っています。
ご教示ください。

表示したい3次元配列(格納内容はダミー)

php

1配列名→$HyojiSeikeiList 2Array 3( 4 [0] => Array 5 ( 6 [book_title] => Array 7 ( 8 [0] => はりーぽったーと賢者の石 9 ) 10 [important_item] => Array 11 ( 12 [0] => 賢者の石 13 ) 14 [sub_item] => Array 15 ( 16 [0] => にんばすの箒 17 ) 18 [enemy] => Array 19 ( 20 [0] => くぃれる先生 21 ) 22 ) 23 24 [1] => Array 25 ( 26 [book_title] => Array 27 ( 28 [0] => はりーぽったーと秘密の部屋 29 ) 30 [important_item] => Array 31 ( 32 [0] => 空飛ぶ車 33 [1] => トムリドルの日記 34 [2] => 蛇語 35 ) 36 [sub_item] => Array 37 ( 38 [0] => くも 39 [1] => へび 40 [2] =>41 ) 42 [enemy] => Array 43 ( 44 [0] => 日記のトムリドル 45 [1] => でかいくも 46 [2] => でかいへび 47 ) 48 ) 49   この先何個か続く 50)

試したこと

以下のようなコードをSmartyに埋め込んでみました。
(とてもおかしいとは思いますがまったく思いつかず…。)

HTML

1{foreach $HyojiSeikeiList as $Lists} 2 {foreach $Lists as $List} 3 {$Lists.book_title.List} 4 {$Lists.important_item.List} 5 {$Lists.sub_item.List} 6 {$Lists.enemy.List} 7 {/foreach} 8{/foreach}

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/02/14 03:03

$HyojiSeikeiListは正しく渡されてますか?なにかエラー等でていませんか?
退会済みユーザー

退会済みユーザー

2018/02/14 03:06

エラーは特に出ていません。HTMLでforeachを組み込んだ部分は真っ白な状態です。
guest

回答1

0

ベストアンサー

ごめんなさいv2前提で回答してしまいました。
v3でas導入されてますね・・・


Smartyのforeachの文法が違います。

Example 7.6. item および key 属性の説明

$array as $key=>$value ではなく、from=$array key=key item=value です。

追記

配列、または存在しない情報を出力しようとしているので何も表示されないのだと思います。
Listという名前のキーは存在しませんよね?
2つ目のforeachでそれぞれのカテゴリまで取り出せているので更にその中を取り出そうとするのであれば、
もう1つforeachを重ねてやる必要があります。

※v3検証環境が手元にないので生PHPでの検証結果を元に出しています。

php

1{foreach $HyojiSeikeiList as $lists} 2 {foreach $lists as $category=>$cat_list} 3 カテゴリ:{$category} 4  {foreach $cat_list as $name} 5{$name} 6   {/foreach} 7 {/foreach} 8{/foreach} 9 10//出力結果 11カテゴリ:book_title 12・はりーぽったーと賢者の石 13カテゴリ:important_item 14・賢者の石 15カテゴリ:sub_item 16・にんばすの箒 17カテゴリ:enemy 18・くぃれる先生 19カテゴリ:book_title 20・はりーぽったーと秘密の部屋 21カテゴリ:important_item 22・空飛ぶ車 23・トムリドルの日記 24・蛇語 25カテゴリ:sub_item 26・くも 27・へび 28・鏡 29カテゴリ:enemy 30・日記のトムリドル 31・でかいくも 32・でかいへび

特定の要素のみ

php

1{foreach $HyojiSeikeiList as $lists} 2 {foreach $lists.book_title as $name} 3{$name} 4 {/foreach} 5{/foreach}

投稿2018/02/14 03:00

編集2018/02/14 04:39
m.ts10806

総合スコア80848

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/02/14 03:03

すいません私もバージョンを書き忘れてしまっていました。 質問文に追記します。
m.ts10806

2018/02/14 03:29

回答に追記しました。 配列の扱い方は生PHPと同じなのでその辺りから考える(または考え方をおさえる)と良いと思います。
退会済みユーザー

退会済みユーザー

2018/02/14 04:30

回答ありがとうございます、無事に出力することができました。 よろしければもう一つ教えていただきたいのですが、 この3次元配列を、例えばカテゴリbook_title内の値のみを出力したい場合は どのようにしたら良いでしょうか試行錯誤してやってみたのですがうまくいかず、ご教示ください。
m.ts10806

2018/02/14 04:40

smarty3の書き方として合っているか分かりませんが、追記しました。 指定の配列キーをforeachのループ対象配列とするだけです。
m.ts10806

2018/02/14 04:42

最初のコメントにも書きましたが生PHPと考え方は同じです。 Smartyも裏ではPHPソースへの置換が行われた上で画面出力処理が行われています。 まずは生PHPでの書き方をおさえていったほうが後々困らなくなりますよ。
退会済みユーザー

退会済みユーザー

2018/02/14 04:45

うまく出力することができました。 Smartyというものに意識がいきすぎていたようです…。 アドバイスありがとうございました。
m.ts10806

2018/02/14 04:51

何はともあれ解決できたようで良かったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問