PHPの複数行文字列


141

考慮してください:

$xml = "l";
$xml = "vv";

echo $xml;

これはvvをエコーします。SimpleXMLなどの複数行の文字列を実行する理由と方法を教えてください。


1
次の行に "l"に続いて "vv"をエコーし​​ますか?
マイクサミュエル

3
見上げるconcatenation。それはあなたが文字列をまとめるときにそれが呼ばれるものです。
Crashspeeder 2012年

14
@haywire Googleで最初の有益な結果になること。
Cees Timmerman、2015年

回答:


262

上手、

$xml = "l
vv";

動作します。

次のものも使用できます。

$xml = "l\nvv";

または

$xml = <<<XML
l
vv
XML;

コメントに基づいて編集:

.=演算子を使用して文字列を連結できます。

$str = "Hello";
$str .= " World";
echo $str; //Will echo out "Hello World";

5
私がループを持っているか、MySQL while whileがループしているかどうかを忘れてしまいました。ありがとう
TheBlackBenzKid 2012年

89
@TheBlackBenzKid:うーん...何ですか?
マダラのゴースト

1
例。while($ rc = mysql_fetch_array($ adviews)){$ xml。= "<set name = '"。$ rc ["date"]。 "' value = '1' hoverText = '"。$ rc ["date" ]。 "'/>"; } $ xml。= "</ graph>";
TheBlackBenzKid 2012年

3
@Pacerierヒアドキュメント内の引用符をエスケープする必要はありません。
マダラのゴースト

7
@Pacerier引用符よりもヒアドキュメントを気にする必要がある理由を尋ねました。それが理由です。どちらも複数行文字列のオプションです。
マダラのゴースト

139

PHPには、ヒアドキュメントとナウドキュメントの文字列があります。これらは、PHPで複数行の文字列を処理するための最良の方法です。

http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc

$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
$var is replaced automatically.
EOD;

NowdocはHeredocに似ていますが、変数を置き換えません。

$str = <<<'EOD'
Example of string
spanning multiple lines
using nowdoc syntax.
$var is NOT replaced in a nowdoc.
EOD;

endトークンEODはインデントしないでください。インデントしないと、PHPで認識されません。また、「EOD」を使用する必要はありません。任意の文字列を使用できます。


8
私はいつもインデントを忘れているので賛成です。
Matuszek 2016年

8
$xml="l" . PHP_EOL;
$xml.="vv";
echo $xml;

エコーします:

l
vv

PHP_EOLに関するドキュメント


お気に入り。@Pacerier
TheBlackBenzKid

回答にマークを付ける方法はありますか?あなたはそれが質問でしかできないといつも思っていました。@TheBlackBenzKid
Pacerier

私が彼を上に向けたとき、私は彼にプラス+1を与えたことを意味しました。
TheBlackBenzKid 2015

「リツイート」@TheBlackBenzKid;)
アンドレス・モラレス

8

パフォーマンスの点でどのようにスタックするかはわかりませんが、本当に重要ではない場所では、\ r \ n(CRLF)を使用していて、PHPファイルの形式ではないため、この形式が好きですに保存されました。

$text="line1\r\n" .
      "line2\r\n" .
      "line3\r\n";

また、必要に応じてインデントすることもできます。


5

別の解決策は、出力バッファリングを使用することです。出力/エコーされているすべてのものを収集し、変数に格納できます。

<?php
ob_start(); 

?>line1
line2
line3<?php 

$xml = ob_get_clean();

この正確なケースでは、出力バッファリングはパフォーマンスとコードのクリーン度の点で最良のソリューションではないかもしれませんが、参照のためにここに残しておく価値があることに注意してください。


2

たぶん「=」の「。= indead」を試してみませんか

$xml="l";
$xml.="vv";

「lvv」を与えます。


1
彼は魔女のオペレーティングシステムが使用していると言いましたか?Aanswerは完全に質問です;)
Norbert Orzechowicz

ただし、それは問題の要求に応じて複数行の文字列にはなりません。
ToolmakerSteve


0

文字列 "l"と "vv"をコードのみの別々の行に配置するには:

$xml = "l";
$xml .= "vv"
echo $xml;

このインスタンス.=では、その文字列変数の前のバージョンの最後に文字列を追加することを言っています。=は代入演算子にすぎないので、元のコードでは変数に新しい文字列値を代入していることに注意してください。

文字列 "l"と "vv"をエコーのみの別々の行に配置するには:

$xml = "l\nvv"
echo $xml;

この場合、改行文字\nが処理するため、複数の文字列は必要ありません。

文字列 "l"と "vv"をコード内の別の行に配置してエコーする場合:

$xml = "l";
$xml .= "\nvv"
echo $xml;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.