PHP'de çok satırlı dizeler


141

Düşünmek:

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

echo $xml;

Bu yankılanacak vv . SimpleXML gibi şeyler için neden ve nasıl çok satırlı dizeler yapabilirim ?


1
Bir sonraki satırda "l" ve ardından "vv" yankılanmasını istiyor musunuz?
— Mike Samuel

3
Yukarı bak concatenation. Dizeleri bir araya getirdiğinizde buna denir.
— Crashspeeder

14
@haywire Google'daki ilk ve yardımcı sonuç olarak.
— Cees Timmerman

Yanıtlar:


262

İyi,

$xml = "l
vv";

İşler.

Aşağıdakileri de kullanabilirsiniz:

$xml = "l\nvv";

veya

$xml = <<<XML
l
vv
XML;

Yoruma göre düzenleme:

.=İşleci kullanarak dizeleri birleştirebilirsiniz .

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

5
Arasında döngüler veya MySQL olup olmadığını unuttun. Teşekkürler
— TheBlackBenzKid

89
@TheBlackBenzKid: Ummm ... Ne?
— Madara'nın Hayaleti

1
Misal. while ($ rc = mysql_fetch_array ($ adviews)) {$ xml. = "<set name = '". $ rc ["tarih"]. "' value = '1' hoverText = '". $ rc ["tarih" ] "'/>."; } $ xml. = "</graph>";
— TheBlackBenzKid

3
@Pacerier Bir yorumlu metin içindeki alıntılardan kaçmanıza gerek yoktur.
— Madara'nın Hayaleti

7
@ Pacerer Yorumlu metinler için neden yorumlu metinle uğraşmamız gerektiğini sordunuz. Bu yüzden. Her ikisi de çok satırlı dizeler için seçenekler.
— Madara'nın Hayaleti

139

PHP, PHP'de çok satırlı dizeleri işlemenin en iyi yolu olan Heredoc ve Nowdoc dizelerine sahiptir.

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 bir Heredoc gibidir, ancak değişkenlerin yerini almaz.

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

Son belirtecin EODhiç girintili olmaması gerektiğine dikkat edin , yoksa PHP bunu kabul etmeyecektir. Ayrıca, " EOD" kullanmak zorunda değilsiniz ; istediğiniz herhangi bir dize olabilir.


8
Kaldırıldı çünkü girinti her zaman unutuyorum.
— Matuszek


8

Performans açısından nasıl istiflendiğinden emin değilim, ama gerçekten önemli olmayan yerler için, bu formatı beğendim çünkü PHP dosyamın hangi formatta olursa olsun \ r \ n (CRLF) kullandığından emin olabilirim kaydedildi.

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

İstediğim gibi girintili olmamı da sağlıyor.


5

Başka bir çözüm çıktı tamponlama kullanmaktır , çıktılanan / yankılanan her şeyi toplayabilir ve bir değişken içinde saklayabilirsiniz.

<?php
ob_start(); 

?>line1
line2
line3<?php 

$xml = ob_get_clean();

Çıktı tamponlamanın, bu tam durum için performans ve kod temizliği açısından en iyi çözüm olmayabileceğini, ancak referans için burada bırakmaya değer olduğunu lütfen unutmayın.




0

"L" ve "vv" dizelerini yalnızca koddaki ayrı satırlara koymak için:

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

Bu örnekte .=, dizeyi söz konusu dize değişkeninin önceki sürümünün sonuna eklemeyi söylüyorsunuz . Unutmayın = sadece bir atama operatörüdür, bu nedenle orijinal kodunuzda değişkene yeni bir dize değeri atarsınız.

"L" ve "vv" dizelerini yalnızca yankıdaki ayrı satırlara koymak için:

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

Bu durumda birden çok dizeye ihtiyacınız yoktur, çünkü yeni çizgi karakteri \nbunu sizin yerinize halleder.

"L" ve "vv" dizelerini koddaki ayrı satırlara ve yankılanırken koymak için:

$xml = "l";
$xml .= "\nvv"
echo $xml;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.