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

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

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

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

Q&A

解決済

3回答

533閲覧

PHP:echoの”・・・”のなかで二次元配列を展開したい

MiyaTatu

総合スコア16

PHP

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

0グッド

0クリップ

投稿2017/12/13 02:20

PHPの中でHTMLの
echo "<img src=・・・>"
の・・・部分に2次元配列を入れてプログラムを作っています。
その配列は、DBから画像のパスを取り出して格納したものなんですが、2次元配列にすると
上手く展開できません
(別々の変数に格納した場合は成功しましたが、二次元配列で実現したいです)

PHP

1$rec0 = $image->fetchAll(); //$recにフェッチしてレコード(画像のパス)を格納 2/*そもそも""の中でないならうまくいく*/ 3echo $rec0[0][0];       //結果:./example/x.png 4 5echo "<img height=200 src=$rec0[0][0] width=200 alt=*/></td>" 6//結果:Notice: Array to string conversion in C:\xampp\htdocs\ホーム.php 7 8/*いろいろ試したけど上手くいきません。例えば下のようにすると*/ 9echo "<img height=200 src=$rec0['0']['0'] width=200 alt=*/>" 10//結果:Parse error: syntax error, unexpected ''(略)となります

うまく展開する方法はないでしょうか?

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

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

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

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

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

guest

回答3

0

【ご指摘を戴いた点を修正しました。】
htmlの文法にも準拠するならば

echo '<img height="200" src="' . $rec0[0][0] . '" width="200" alt="*" /></td>';

もしくは

echo "<img height='200' src='" . $rec0[0][0] . "' width='200' alt='*' /></td>";

これでもいい

echo "<img height=200 src='" . $rec0[0][0] . "' width=200 alt='*' /></td>";

って書いちゃう。
▼ここはまちがい
html要素の属性に与えるパラメータは、数字だろうが文字列だろうがダブルクオーテーションやシングルクォーテーションで括るのが正しいはず。
▲ここまで

投稿2017/12/13 02:38

編集2017/12/13 04:27
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/12/13 02:40

単純に、タイプ数増えてますよね? めんどくさいっしょ? なんで普通に書けばいいだけなのに、そんなめんどくさい書き方を教えるんです?
MiyaTatu

2017/12/13 02:44

確かに、これならHTMLそのままの形を損ないませんね。 既存のHTMLをPHPにしたくなったときは echo "" でくくってHTMLのダブルクオーテーションを一つひとつ消したりしていました。これならとても融通が利きそうですね。教えていただいてありがとうございます!
MiyaTatu

2017/12/13 02:46

luckerさん:確かにタイプ数増えて大変ですね・・・でも、まだまだ初心者なのでたくさんのことに触れられてとてもうれしいです。心配していただいてありがとうございます!
退会済みユーザー

退会済みユーザー

2017/12/13 02:54

だから、前置きしているじゃないですか、htmlの文法に準拠したいのであればと。 私の狙うレベル感は、html validatorの類でも文法エラーが出ないことであって、単に(自分の観測範囲内で)表示できればいいというところよりも上にいます。 そんなレベル感は要らないということであれば、どうぞ無視して、自分のOKレベルで事を進めてください。 伝統的に、ダブルクォーテーションじゃなくシングルでも、場合によってはつけなくても、大概のwebブラウザでは表示できるでしょうし、今後も表示できる状況は続くでしょう。
退会済みユーザー

退会済みユーザー

2017/12/13 02:58

誰(の意見・主張)が正しい、じゃなく、場合によってレベル感を設定して正しいと思うやり方でやるのが良いです。 タイプ数が増えることで少なからず工程や納期にも影響が出る可能性ももしかしたら生じてくるかもしれませんし、タイプ数を減らすことでプログラムテスト期間をより多く確保することも、場合によっては大事なことです。
退会済みユーザー

退会済みユーザー

2017/12/13 02:59

なんか、長々と書いてるけど、それ、今回の質問内容に全く関係ない観点だって分からない方?
退会済みユーザー

退会済みユーザー

2017/12/13 03:01

あなたの主張の主題は「HTMLではシングルクオートじゃなくて、ダブルクオート使え!」だったはずじゃん。 自分で言った事忘れちゃったの? それ、なんか質問内容に関係あるの?
退会済みユーザー

退会済みユーザー

2017/12/13 03:08

正解とみなすレベルをどこに置くか、によって変わることであって、私とluckerさんのレベル感が合わないというだけのことです。 私はダブルクオーテーションで括るのが、タイプ数が増えたりする面もあるけど正しいことだと考えたので、回答を寄せたまでです。それを否定されるいわれはないです。
退会済みユーザー

退会済みユーザー

2017/12/13 03:11

>正解とみなすレベルをどこに置くか、によって変わること クオートの種類が正解にかかわる可能性なんか、今回の質問には全く無いです。 Could U understand it yet?
退会済みユーザー

退会済みユーザー

2017/12/13 03:18

luckerさんとのやり取りに使う時間が惜しいので、勘弁して下さい。 私の主張は、htmlの文法に準拠した書き方ができる人が増えてくれることを望むだけです。 そのために、終わったやり取りの質問に、寄せなくてもいい回答を寄せてしまっただけで、なぜここまで言われなければいけないのか。 もっと生産的なことに時間を使わせてください。
退会済みユーザー

退会済みユーザー

2017/12/13 03:49

https://www.w3schools.com/html/html_attributes.asp :We Suggest: Quote Attribute Values The HTML5 standard does not require quotes around attribute values. :Single or Double Quotes? Double quotes around attribute values are the most common in HTML, but single quotes can also be used. In some situations, when the attribute value itself contains double quotes, it is necessary to use single quotes: 別に、ダブルクオート推奨とか言ってないじゃん。 > htmlの文法にも準拠するならば なんで嘘つくの?
退会済みユーザー

退会済みユーザー

2017/12/13 04:17

html5の時代になって、現状の運用に合わせて文法が緩んだだけだと思われます。 不勉強で申し訳ありませんでした。 今回の回答としてはふさわしくなかったことを認めさせたいようなので、その点は認めます。
退会済みユーザー

退会済みユーザー

2017/12/13 04:19

ご指摘の点を、回答に反映いたしました。
guest

0

echoを使う場合はluckerさんの回答の他に、次のような書き方でも良いと思います。

PHP

1echo "<img height=200 src=" . $rec0['0']['0'] . " width=200 alt=*/>"

またechoにこだわりがないのであれば、printfを使うことをお勧めしておきます。

PHP

1printf("<img height=200 src=%s width=200 alt=*/>", $rec0['0']['0']);

投稿2017/12/13 02:30

ttyp03

総合スコア16998

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

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

MiyaTatu

2017/12/13 02:34

なるほど、結合するんですね! printfは完全に盲点でした・・・ お暇であれば、簡単におすすめの理由を教えていただきたいです!
ttyp03

2017/12/13 02:41

文字列の中に変数を埋め込むとゴチャゴチャして見づらくなるじゃないですか。 今回のように1個くらいなら良いですけど、2個3個とあるとわかりづらい。 いわゆる可読性が悪くなるのです。 printfを使うことで、文字列中のどの部分が可変になり値が埋め込まれるのかが明確になります。 こんな感じ。 printf("<img height=%d src=%s width=%d alt=*/>", $width, $rec0['0']['0'], $height); 書式展開するのでパフォーマンスが悪くなることを理由にお勧めしない人もいますが、気になる程の性能劣化はないと思います。
退会済みユーザー

退会済みユーザー

2017/12/13 02:42

単純に、見にくいっしょ。
退会済みユーザー

退会済みユーザー

2017/12/13 02:42

リテラルの中に埋め込んだ方が、みやすいっしょ。 IDE使ってないんですか? マークアップされるので、埋め込んだ方が見やすいっすよ。
ttyp03

2017/12/13 02:47

まあ人それぞれなので個人的な感覚で「見にくい」って決めつけるのはどうかと思いますけど。 PHPしかやってないような人だと埋め込んだ方がわかりやすいのかもしれませんが。 まあ好きなのを選べばいいんじゃないでしょうか。 私は押しつけているわけではないので。
退会済みユーザー

退会済みユーザー

2017/12/13 02:47

特に、あなたのやり方でヒアドキュメント内での変数展開できますか? echo <<<EOD Example of string spanning multiple lines using heredoc syntax. EOD; こういう奴です。 普通に {} 使えば万能なのに、なんで初心者さんに変なやり方教えるんですか?
ttyp03

2017/12/13 02:49

だってこの質問はヒアドキュメントの質問じゃないじゃん。 変なって… 他にも方法はありますよって言ってるだけなのに。
退会済みユーザー

退会済みユーザー

2017/12/13 02:50

他にあるっていうときは、最低限等価の利便性が必要ですよね? Could U understand it?
退会済みユーザー

退会済みユーザー

2017/12/13 02:51

8083が泣きますよ。
MiyaTatu

2017/12/13 02:51

ttyp03さん:なるほど、そういった考え方もできるんですね。確かに、コーディングは可読性も意識しないといけないですね!いろいろと教えていただいて皆様ありがとうございました!またいろいろ聞くと思いますので、その時はよろしくお願いします!
MiyaTatu

2017/12/13 02:53

まぁ、今回は無事解決したということで、私に免じてお二人ともこれくらいで・・・私はまた頑張ってコードを書いてきますので、それでは!本当にありがとうございました!
退会済みユーザー

退会済みユーザー

2017/12/13 02:57

大抵の質問者さんは謙虚に教えを乞うてきてるのに、それに回答する浅い知識の回答者の無責任な発言ときたら…、というのが正直な気持ちですね。
ttyp03

2017/12/13 03:02

プログラムなんて答えはひとつじゃないんだから、色々な回答があっていいじゃないの。 今役に立たなくても他のシーンで使えることもあるし。 なんでそう固執するかね。
guest

0

ベストアンサー

こういうことかなー。

PHP

1echo "<img height=200 src='{$rec0[0][0]}' width=200 alt=*/></td>"

投稿2017/12/13 02:25

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

MiyaTatu

2017/12/13 02:28

ありがとうございます!!一瞬で解決しました;; そういった変数展開があるこを知らなかったです。本当にありがとうございました!!
退会済みユーザー

退会済みユーザー

2017/12/13 02:31

えっと、PHPの変数展開は{ }で囲むと強制的に展開させることができます。 ストリングリテラルの中で変数を展開しようとすると、どこまでが変数でどこからストリングか、PHPのエンジンが判断できなくなるので、「こっからここまで変数ですよ」と、PHPに教えるのが { } なんです。
MiyaTatu

2017/12/13 02:37

なるほど、変数がここだとハッキリさせるためのものなんですね! ストリングリテラルの中で変数展開するときは{}で囲むよう意識したいと思います。
退会済みユーザー

退会済みユーザー

2017/12/13 02:38

そうですね。PHPは変数を書くだけで展開してくれるので {} が省略されがちですが、今回のような問題にぶち当たることがあるので、常に {} で囲む癖をつけておいた方がストレスが無くて良いと思います。
MiyaTatu

2017/12/13 02:40

勉強させていただきました。 ご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問