String multi-baris di PHP

153

Mempertimbangkan:

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

echo $xml;

Ini akan menggemakan vv . Mengapa dan bagaimana saya dapat membuat string multi-baris untuk hal-hal seperti SimpleXML , dll.?

TheBlackBenzKid
sumber
1
Apakah Anda ingin menampilkan "l" diikuti dengan "vv" di baris berikutnya?
Mike Samuel
3
Lihat ke atas concatenation. Itulah sebutannya saat Anda mengumpulkan string.
Crashspeeder
14
@haywire Dengan menjadi hasil pertama dan bermanfaat di Google.
Cees Timmerman

Jawaban:

282

Baik,

$xml = "l
vv";

Bekerja.

Anda juga dapat menggunakan yang berikut ini:

$xml = "l\nvv";

atau

$xml = <<<XML
l
vv
XML;

Edit berdasarkan komentar:

Anda dapat menggabungkan string menggunakan .=operator.

$str = "Hello";
$str .= " World";
echo $str; //Will echo out "Hello World";
Hantu Madara
sumber
5
Anda lupa jika saya memiliki loop atau MySQL saat loop di antaranya. Terima kasih
TheBlackBenzKid
96
@TheBlackBenzKid: Ummm ... Apa?
Hantu Madara
1
Contoh. sementara ($ rc = mysql_fetch_array ($ adviews)) {$ xml. = "<set name = '". $ rc ["date"]. "' value = '1' hoverText = '". $ rc ["date" ]. "'/>"; } $ xml. = "</graph>";
TheBlackBenzKid
3
@Pacerier Anda tidak perlu melepaskan diri dari kutipan di dalam heredoc.
Hantu Madara
7
@Pacerier Anda bertanya mengapa kita perlu repot dengan heredoc tentang kutipan. Karena itulah. Keduanya adalah opsi untuk string multiline.
Hantu Madara
154

PHP memiliki string Heredoc dan Nowdoc, yang merupakan cara terbaik untuk menangani string multiline di 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 seperti Heredoc, tetapi tidak menggantikan variabel.

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

Berhati-hatilah bahwa token akhir EODtidak boleh diindentasi sama sekali, atau PHP tidak akan mengakuinya. Selain itu, Anda tidak harus menggunakan " EOD"; itu bisa berupa string apa pun yang Anda inginkan.

Dan Fabulich
sumber
11
Suara positif karena saya selalu melupakan indentasi.
Matuszek
11

Tidak yakin bagaimana cara menumpuk dari segi kinerja, tetapi untuk tempat-tempat yang tidak terlalu penting, saya suka format ini karena saya yakin itu menggunakan \ r \ n (CRLF) dan bukan format apa pun yang kebetulan file PHP saya disimpan dalam.

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

Ini juga memungkinkan saya membuat indentasi sesuka saya.

eselk
sumber
10
$xml="l" . PHP_EOL;
$xml.="vv";
echo $xml;

Akan bergema:

l
vv

Dokumentasi tentang PHP_EOL .

Ryan
sumber
Difavoritkan. @Pacerier
TheBlackBenzKid
Apakah ada cara untuk menandai jawaban? Saya selalu berpikir Anda hanya bisa melakukan itu pada pertanyaan. @TheBlBenzKid
Pacerier
Maksud saya, saya memberinya plus +1 saat saya mengembalikannya.
TheBlackBenzKid
@TheBllBenzKid "faved";)
Andrés Morales
5

Solusi lain adalah dengan menggunakan buffering keluaran , Anda dapat mengumpulkan semua yang dikeluarkan / di-echo dan menyimpannya dalam sebuah variabel.

<?php
ob_start(); 

?>line1
line2
line3<?php 

$xml = ob_get_clean();

Harap dicatat bahwa buffering keluaran mungkin bukan solusi terbaik dalam hal kinerja dan kebersihan kode untuk kasus yang tepat ini tetapi sebaiknya tinggalkan di sini untuk referensi.

Xavi Esteve
sumber
2

Mungkin mencoba ". =" Indead of "="?

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

akan memberi Anda "lvv";

Norbert Orzechowicz
sumber
1
Apa dia bilang sistem operasi penyihir yang dia gunakan? Sebuah jawaban lengkap sebagai pertanyaan;)
Norbert Orzechowicz
Namun, itu tidak menghasilkan string multi-baris seperti yang diminta.
ToolmakerSteve
1

Untuk meletakkan string "l" dan "vv" pada baris terpisah dalam kode saja:

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

Dalam contoh ini Anda mengatakan untuk menambahkan .=string ke akhir versi sebelumnya dari variabel string itu. Ingatlah bahwa = hanyalah operator penugasan, jadi dalam kode asli Anda, Anda menetapkan nilai string baru untuk variabel.

Untuk meletakkan string "l" dan "vv" pada baris terpisah di echo saja:

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

Anda tidak memerlukan banyak string dalam hal ini, karena karakter baris baru \nakan mengurusnya untuk Anda.

Untuk meletakkan string "l" dan "vv" pada baris terpisah dalam kode dan saat menggema:

$xml = "l";
$xml .= "\nvv"
echo $xml;
Shawn Solomon
sumber
0
$xml="l\rn";
$xml.="vv";

echo $xml;

Tetapi Anda harus benar-benar melihat http://us3.php.net/simplexml

nathanjosiah
sumber