• ベストアンサー

文字列出力中に変数を{}でかこって同時に出力する時の疑問

コーディングしているときに不思議に思ったので、タイトルに関することについて教えてください。 例えば、  echo "<a href=\"{$MyArray[$num]}\">リンク</a>"; というのは  echo "<a href=\"$MyArray[$num]\">リンク</a>"; としても動きますが、果たして、{}を使うメリットとは何でしょうか? そして、上記のコードに関数を織り交ぜて、その間数の出力結果を併せて出力したい場合には  echo "<a href=\"$MyArray[$num]\">リンク{MyFunc('something')}</a>"; としては動きません。 これを回避する方法として、  echo "<a href=\"$MyArray[$num]\">リンク" . MyFunc('something') . "</a>"; とする方法以外に便利なやり方はあるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kusukusu
  • ベストアンサー率38% (141/363)
回答No.1

通常は {}はヒアドキュメント内で利用し、普段は print "aaa".$hoge."aaa"; とするのが「仕様」です。 確かに仰る通り、どちらでも動きますが、その話は大げさに言えば、 「車がいないときは赤信号で渡っても問題ないよね?」 と言っているようなものです。

bunch
質問者

お礼

なるほど。早速のお返事に感謝いたします。 普段はドット演算子を使っているのですが、そういえば{}でかこうのがあったよな・・・と思い出したが、 曖昧な記憶でした。(;-_-)ι $text = <<<__HTML__ <table> <tr> <td> {$outputdata} </td> </tr> </table> __HTML__; echo $text; ヒアドキュメント内とはこういう事ですね。思えば以前私、使っていました・・・

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

ダブルクォート(")内では変数はその内容に展開されます。 {}を使うメリットとは 例えば $testという変数があったとき echo "$testSample"; とした時何が起こるでしょうか 展開すべき変数は $testなのでしょうか それとも $testSampleなのでしょうか そういう時 echo "{$test}Sample"; とすることで、変数と後続の文字列を区別でき期待通りに動かせます

bunch
質問者

お礼

なるほど!そういう便利な方法があるんですね。 同じようなケースがあった場合にはドット演算子で今まで囲っていました ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 2つの変数(文字)を組み合わせて1つの変数として認識させる方法?

    PHPの初心者チュートリアルサイトやphp manualなども見てるのですが あまりに基本的過ぎるのか、どうしてもわからないので教えてください。 $myarray1 = array("a","b","c"); $myarray2 = array("d","e","f"); $myarray3 = array("x","y","z"); という配列があるとして、 これをforループで使いたいと考えました。 例えば無理やり書くと下記のようなイメージなのですが やはりこのようなあてずっぽうではうまく行かず・・・。 for( $i = 1; $i<= 3; $i++ ){ echo {$myarray.$i}[0] . "<br/>"; } 「$myarray.$i」を$myarray1~3と認識させてa,d,xの3つを出力することはできますか?

    • 締切済み
    • PHP
  • 文字列を変数化したい

    ★hyouji.php $a_01="a"; $a_02="b"; echo $data = $a_??; 上記 hyouji.phpに以下のパラメータで接続した場合に hyouji.php?$num=01 numの値によって a又はbが表示したいです。 つまりパラメーターで渡ったデータを変数名にセットしたいのですが、 良い方法はありますでしょうか?

    • ベストアンサー
    • PHP
  • http://から始まる文字列を探してhtmlの画像タグにしたいです。

    こんばんわ、以前こちらで質問させて頂いたものです。 今回も「perlの正規表現を使用した自動リンク関数」についての質問です。 かなり上級レベルで全然分かりません。。もし分かる方が居られましたら少しだけでも教えて下さい。首を長くしてお待ちしております。では質問です。 文字列を関数に渡して、その中にhttp://**.xx.xxなどのリンクを発見すると<a href="http://**.xx.xx">http://**.xx.xx</a> のように返す関数を使用してます。(↓参照。この関数はこちらのサイトで教えて頂きました、感謝しております) この関数に追加機能として「マッチしたリンクの拡張子がjpgだった場合、<img>タグとして展開する」という処理を加えたいのです。画像でない場合はリンクのみ、付けます。 ◎http://**.xx.xx.jpg の場合 ↓ <a href="http://**.xx.xx.jpg"> <img src="http://**.xx.xx.jpg"> </a> ◎http://**.xx.xx.xx.html の場合 ↓ <a href="http://**.xx.xx.html"> http://**.xx.xx.html </a> 関数全部でなくても、部分的にでも教えて頂けたらそれらをくっつけて作製してみます。どうかよろしくお願いします。 今 使用している関数 sub change_link(){ $_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\=\@\;\#\:\%]+)/$1<a href=\"$2\" target='_blank'>$2<\/a>/g; }

    • ベストアンサー
    • Perl
  • phpの文字列表示

    phpで質問です。 ランダムな数字、1~100の間で70以上が出れば表示を変える というプログラムをしたのですが、 70以上が出るとなぜか表示が崩れます。 正常に表示する方法を教えてください。 コード $rand = mt_rand(1,100); echo $rand; if($rand<70) { echo '<ul> <a href="#"><li>A</li></a> <a href="#"><li>B</li></a> <a href="#"><li>C</li></a> <a href="index.php"><li>D</li></a> </ul>'; } else { echo '<ul><a href="example_sub4.php" target="_brank"><li>close</li></a> <a href="#"><li>E</li></a> <a href="#><li>F</li></a> <a href="index.php"><li>G</li></a>'; } ?>

    • ベストアンサー
    • PHP
  • 出力時のエンティティについて

    お世話になっております。 先日、フォームへ入力する際、使って欲しくない文字をpreg_matchを使うことで回避する事を教えていただきましたが、その際、二重防衛?として出力したとき、htmlspecialcharsを利用するとの事もお教えいただいたのですが、メールアドレスなどの@をエンティティするのはhtmlentitiesとの事なので、試にと、以下のようなコードを記述したのですが、変換されていない事に気付きました。 設置の仕方が可笑しいのでしょうか?それとも利用する関数が違うのでしょうか?アドバイス頂ければ幸いです。 以下は試行錯誤ながら実際に記述しているコードの一部です。 //echo preg_replace($row["mail"]); //echo (htmlentities($row["mail"])); echo (htmlspecialchars($row["mail"]));

    • ベストアンサー
    • PHP
  • 【ActionScript】大量引数の効率のよい受け渡し法は?

    FLASH8(ActionScript2.0)使用者です。 ユーザー定義関数にて引数が大量にある場合、効率よく記述するにはどうすればいいのでしょうか。 現状配列で引数ひとつにまてめて処理しているのですが、関数内で展開する記述が非効率に思えます。 myArray["name"] = "taro"; myArray["age"] = 20; myArray["addr"] = "tokyo";  ・・・ function myFunc(myArray){  var name = myArray["name"];  var age = myArray["age"];  var addr = myArray["addr"];  ・・・ } この展開部分が数十に及ぶ場合、for文か何かで一発記述できればいいのに… と思うわけですがどうなんでしょうか。 「varなしにする」「配列のまま使う」 という方法もあると思いますが今回は除外させてください。 「無理」という回答でも結構です。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • 特定の文字の時だけ起こるエラー?次の○件の場合

    PHPとMySQLで検索システムを作っています。 検索結果を 次の10件> というように10件づつ表示させているのですが、「略」という文字を検索した時のみ検索結果が50件以上あるにもかかわらず 次へ> をクリックして2ページ目を表示させると「検索結果は0件」という表示がでてきてしまいます。 いくつか試したのですが、その他の文字で検索した場合は全て正常に機能するので、原因不明です。 ちょっと分かりづらいかもしれませんが、宜しくお願いします。 かなり簡略化しましたが、こんな感じで作ってます。 if(($page_num+1)*10 < $cnt){ echo "<a href=book.php? nm1=",$url1," & page_num=",$page_num+1,">"; echo "次へ></a>"; }

    • 締切済み
    • PHP
  • PHPリンク

    <?php $num = intval($_POST["id"]); if ($num == 3964785) { <a href="http://nakuranet.com"></a> } else { echo '認証失敗'; } ?> とした場合にエラーが出ます。 認証成功者にのみ、指定ページに飛ばしたいのですが、PHPでリンク先を指定したい場合は、<a>タグは使えないのでしょうか?

    • ベストアンサー
    • PHP
  • 文字列内で定数を使いたいときに手間がかかる

    文字列内で定数を使いたいときにこういう手法があります。 $a = function($t){ return $t }; echo "{$a(TEISUU)}"; これをいろんな関数内でも気軽に使いたいのですが、いざやってみると  ・必要な場所で毎回上記を定義する  ・ライブラリ関数として別個定義しインクルードしておいて、使いたい関数内でglobal宣言する  ・$GLOBALSを使う このようにいずれも余計な手間や見た目が雑になってしまい使い勝手が悪いです。 どの関数内でも手間いらずで「$a(定数)」を使う方法はないでしょうか。

    • ベストアンサー
    • PHP
  • GETメソッドで文字列として+を送信したい

    test.php <?php $id=$_GET["id"]; echo $id; ?> として、同ディレクトリ中のindex.html内にある、 <a href="./test.php?id=+あいうえお -かきくけこ +さしすせそ ">リンク</a> をクリックすると、test.phpでは 「あいうえお -かきくけこ さしすせそ」 と表示されてしまいます。 半角の+も文字列としてGETメソッドで一緒に送りたいのですが、この場合、a要素にはどのようなURLを記せばいいのでしょうか。

    • ベストアンサー
    • PHP