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.