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

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

ただいまの
回答率

91.23%

  • PHP

    15718questions

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

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

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 218

MiyaTatu

score 7

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

$rec0 = $image->fetchAll(); //$recにフェッチしてレコード(画像のパス)を格納
/*そもそも""の中でないならうまくいく*/
echo $rec0[0][0];       //結果:./example/x.png

echo "<img height=200 src=$rec0[0][0] width=200 alt=*/></td>"
//結果:Notice: Array to string conversion in C:\xampp\htdocs\ホーム.php

/*いろいろ試したけど上手くいきません。例えば下のようにすると*/
echo "<img height=200 src=$rec0['0']['0'] width=200 alt=*/>"
//結果:Parse error: syntax error, unexpected ''(略)となります


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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+3

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

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


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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/13 11:34

    なるほど、結合するんですね!

    printfは完全に盲点でした・・・
    お暇であれば、簡単におすすめの理由を教えていただきたいです!

    キャンセル

  • 2017/12/13 11:41

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

    キャンセル

  • 2017/12/13 11:42

    単純に、見にくいっしょ。

    キャンセル

  • 2017/12/13 11:42

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

    キャンセル

  • 2017/12/13 11:47

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

    キャンセル

  • 2017/12/13 11:47

    特に、あなたのやり方でヒアドキュメント内での変数展開できますか?

    echo <<<EOD
    Example of string
    spanning multiple lines
    using heredoc syntax.
    EOD;

    こういう奴です。

    普通に {} 使えば万能なのに、なんで初心者さんに変なやり方教えるんですか?

    キャンセル

  • 2017/12/13 11:49

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

    キャンセル

  • 2017/12/13 11:50

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

    キャンセル

  • 2017/12/13 11:51

    8083が泣きますよ。

    キャンセル

  • 2017/12/13 11:51

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

    キャンセル

  • 2017/12/13 11:53

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

    キャンセル

  • 2017/12/13 11:57

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

    キャンセル

  • 2017/12/13 12:02

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

    キャンセル

+3

【ご指摘を戴いた点を修正しました。】
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 11:40

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

    キャンセル

  • 2017/12/13 11:44

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

    キャンセル

  • 2017/12/13 11:46

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

    キャンセル

  • 2017/12/13 11:54

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

    キャンセル

  • 2017/12/13 11:58

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

    キャンセル

  • 2017/12/13 11:59

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

    キャンセル

  • 2017/12/13 12:01

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

    キャンセル

  • 2017/12/13 12:08

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

    キャンセル

  • 2017/12/13 12:11

    >正解とみなすレベルをどこに置くか、によって変わること

    クオートの種類が正解にかかわる可能性なんか、今回の質問には全く無いです。
    Could U understand it yet?

    キャンセル

  • 2017/12/13 12:18

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

    キャンセル

  • 2017/12/13 12: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 13:17

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

    キャンセル

  • 2017/12/13 13:19

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

    キャンセル

checkベストアンサー

+2

こういうことかなー。

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/13 11:28

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

    キャンセル

  • 2017/12/13 11:31

    えっと、PHPの変数展開は{ }で囲むと強制的に展開させることができます。

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

    キャンセル

  • 2017/12/13 11:37

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

    キャンセル

  • 2017/12/13 11:38

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

    キャンセル

  • 2017/12/13 11:40

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

    キャンセル

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

ただいまの回答率

91.23%

関連した質問

  • 解決済

    ページングが上手くいきません(php mysql)

    いつもありがとうございます。 今回もご教授頂ければ幸いです。 ●実装したい機能 MYSQLからデータを取得してページング処理をしたい。 ●困っている点 MYSQLから

  • 解決済

    PHPで画像のURLをブラウザで表示したいですが出ません。

    こんにちは。こちらでの質問は初めてです。 PHPでエクセルに保存した画像のURLをブラウザで表示したいですがURLのままで画像が表示されません。 該当のソースコード ec

  • 解決済

    写真を表示させたいです。

    ぐるなびapiを使用し始め、二週間が経ちました。 phpと一緒に勉強し、6割のことはわかりましたが、写真を表示させるところでつまずいています。 apiのレスポンスに店舗画像を表

  • 解決済

    <td>の中の全体に写真を入れる方法

    このコードを入れると、<td>の中で写真が小さく表示されます。 <td>の中の全体に写真を表示するにはどうすればいいですか? <td>の隅まで写真を表示したいです。 ec

  • 解決済

    PHPでParse error(T_ELSE)が出てしまいました

    前提・実現したいこと PHPで簡単な電卓(四則計算のみ)を作っています。 ifを使って場合分けをしているときに以下のエラーメッセージが発生しました。  発生している問題・

  • 解決済

    phpで月ごとに画像の切り替えを行いたい

    非常に初歩的な質問で恐縮ですが、タイトルには月ごとと書きましたが、とりあえず11月用の画像を表示して11月が終わったら12月用の画像を表示したいと思っております。 実際に書い

  • 解決済

    インラインスタイルを省いて、サムネイルの画像サイズを変更したい

    前提・実現したいこと 新着情報などに使用するサムネイル画像のサイズを変更したいです。 変更するためにインラインスタイルを除去したいのですが、どこまで修正してよいのかわかりません

  • 解決済

    cakephp でwebrootの画像を表示するには

    1)現在、view の index.ctpで、下記の表示をしています。表示は,出来ています。 画像リンクは、g_imgLink で、画像のjpg名称は、正しく表示されています。

同じタグがついた質問を見る

  • PHP

    15718questions

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