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.