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


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

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.


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 .


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


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.




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;
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.