Wieloliniowe ciągi znaków w PHP

141

Rozważać:

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

echo $xml;

To będzie echo vv . Dlaczego i jak mogę tworzyć ciągi wieloliniowe dla elementów takich jak SimpleXML itp.?

TheBlackBenzKid
źródło
1
Czy chcesz, aby w następnym wierszu powtarzało się „l”, a po nim „vv”?
Mike Samuel
3
Spójrz w górę concatenation. Tak to się nazywa, kiedy łączysz struny.
Crashspeeder
14
@haywire Będąc pierwszym i pomocnym wynikiem w Google.
Cees Timmerman

Odpowiedzi:

262

Dobrze,

$xml = "l
vv";

Pracuje.

Możesz również skorzystać z:

$xml = "l\nvv";

lub

$xml = <<<XML
l
vv
XML;

Edytuj na podstawie komentarza:

Ciągi można łączyć za pomocą .=operatora.

$str = "Hello";
$str .= " World";
echo $str; //Will echo out "Hello World";
Duch Madary
źródło
5
Zapomniałeś, czy mam pętle lub MySQL while pomiędzy. Dzięki
TheBlackBenzKid
89
@TheBlackBenzKid: Ummm ... Co?
Duch Madary,
1
Przykład. while ($ rc = mysql_fetch_array ($ adviews)) {$ xml. = "<set name = '". $ rc ["date"]. "' value = '1' hoverText = '". $ rc ["date" ]. "'/>"; } $ xml. = "</graph>";
TheBlackBenzKid
3
@Pacerier Nie musisz uciekać przed cudzysłowami w heredoc.
Madara's Ghost
7
@Pacerier Zapytałeś, dlaczego musimy zawracać sobie głowę heredocem nad cytatami. Dlatego. Obie opcje są opcjami dla ciągów wielowierszowych.
Madara's Ghost
139

PHP ma ciągi Heredoc i Nowdoc, które są najlepszym sposobem obsługi ciągów wielowierszowych w 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 jest jak Heredoc, ale nie zastępuje zmiennych.

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

Uważaj, że token końcowy EODnie może być w ogóle wcięty, inaczej PHP tego nie potwierdzi. Nie musisz też używać „ EOD”; może to być dowolny ciąg.

Dan Fabulich
źródło
8
Głosowano za, ponieważ zawsze zapominam o wcięciu.
Matuszek
8
$xml="l" . PHP_EOL;
$xml.="vv";
echo $xml;

Powtórzę:

l
vv

Dokumentacja na temat PHP_EOL .

Ryan
źródło
Ulubione. @Pacerier
TheBlackBenzKid
Czy istnieje sposób zaznaczania odpowiedzi? Zawsze myślałem, że możesz to zrobić tylko na pytania. @TheBlackBenzKid
Pacerier
Chodziło mi o to, że dałem mu +1, gdy go reprezentowałem.
TheBlackBenzKid
@TheBlackBenzKid "faved";)
Andrés Morales
8

Nie jestem pewien, jak układa się pod względem wydajności, ale w miejscach, w których tak naprawdę nie ma to znaczenia, podoba mi się ten format, ponieważ mogę być pewien, że używa \ r \ n (CRLF), a nie innego formatu, w jakim znajduje się mój plik PHP zapisane w.

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

Pozwala mi też tworzyć wcięcia, jak chcę.

eselk
źródło
5

Innym rozwiązaniem jest użycie buforowania wyjścia , możesz zebrać wszystko, co jest wysyłane / wyświetlane na ekranie i przechowywać w zmiennej.

<?php
ob_start(); 

?>line1
line2
line3<?php 

$xml = ob_get_clean();

Należy pamiętać, że buforowanie danych wyjściowych może nie być najlepszym rozwiązaniem pod względem wydajności i czystości kodu w tym konkretnym przypadku, ale warto je tutaj zostawić w celach informacyjnych.

Xavi Esteve
źródło
2

Może spróbuj ". =" Nieumarły z "="?

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

da ci "lvv";

Norbert Orzechowicz
źródło
1
Czy powiedział, że system operacyjny, którego używa? Odpowiedź jest jak pytanie;)
Norbert Orzechowicz
Jednak nie powoduje to powstania ciągu wielowierszowego zgodnie z żądaniem w pytaniu.
ToolmakerSteve
0

Aby umieścić ciągi „l” i „vv” w osobnych wierszach samego kodu:

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

W tym przypadku mówisz, że chcesz dołączyć .=ciąg na końcu poprzedniej wersji tej zmiennej łańcuchowej. Pamiętaj, że = jest tylko operatorem przypisania, więc w oryginalnym kodzie przypisujesz zmiennej nową wartość ciągu.

Aby umieścić ciągi „l” i „vv” w osobnych wierszach samego echa:

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

W tym przypadku nie potrzebujesz wielu ciągów, ponieważ nowy znak linii \nzajmie się tym za Ciebie.

Aby umieścić ciągi „l” i „vv” w osobnych wierszach w kodzie i podczas wyświetlania echa:

$xml = "l";
$xml .= "\nvv"
echo $xml;
Shawn Solomon
źródło