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.?


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";

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.


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.


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

Akan bergema:

l
vv

Dokumentasi tentang PHP_EOL .


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.


2

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

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

akan memberi Anda "lvv";


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;

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.