Sequências de várias linhas em PHP


141

Considerar:

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

echo $xml;

Isso ecoará vv . Por que e como posso criar strings de várias linhas para coisas como SimpleXML etc.?


1
Deseja que ele ecoe "l" seguido de "vv" na próxima linha?
Mike Samuel

3
Olhe para cima concatenation. É assim que se chama quando você junta as cordas.
Crashspeeder 16/03/12

14
@haywire Por ser o primeiro e útil resultado no Google.
Cees Timmerman

Respostas:


262

Bem,

$xml = "l
vv";

Trabalho.

Você também pode usar o seguinte:

$xml = "l\nvv";

ou

$xml = <<<XML
l
vv
XML;

Edite com base no comentário:

Você pode concatenar cadeias usando o .=operador.

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

5
Você esqueceu se eu tenho loops ou MySQL enquanto loops no meio. Obrigado
TheBlackBenzKid

89
@TheBlackBenzKid: Ummm ... O quê?
Madara's Ghost

1
Exemplo. while ($ rc = mysql_fetch_array ($ adviews)) {$ xml. = "<nome do conjunto = '". $ rc ["date"]. "' value = '1' hoverText = '". $ rc ["date" ]. "'/>"; } $ xml. = "</graph>";
TheBlackBenzKid

3
@Pacerier Você não precisa escapar de aspas dentro de um heredoc.
Ghost de Madara

7
@Pacerier Você perguntou por que precisamos nos preocupar com o heredoc sobre citações. É por isso. Ambas são opções para cadeias de linhas múltiplas.
Ghost de Madara

139

O PHP possui cadeias Heredoc e Nowdoc, que são a melhor maneira de lidar com cadeias multilinhas no 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;

Um Nowdoc é como um Heredoc, mas não substitui variáveis.

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

Cuidado para que o token final EODnão deva ser recuado ou o PHP não o reconhecerá. Além disso, você não precisa usar " EOD"; pode ser qualquer string que você desejar.


8
Voto positivo, porque eu sempre esqueço o recuo.
Matuszek


8

Não tenho certeza de como ele se comporta em termos de desempenho, mas para lugares onde isso realmente não importa, eu gosto desse formato porque posso ter certeza de que ele está usando \ r \ n (CRLF) e não o formato do meu arquivo PHP. salvo em.

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

Também me permite recuar como quiser.


5

Outra solução é usar o buffer de saída , você pode coletar tudo o que está sendo produzido / ecoado e armazená-lo em uma variável.

<?php
ob_start(); 

?>line1
line2
line3<?php 

$xml = ob_get_clean();

Observe que o buffer de saída pode não ser a melhor solução em termos de desempenho e limpeza de código para este caso exato, mas vale a pena deixá-lo aqui para referência.


2

Talvez tente ". =" Indead of "="?

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

lhe dará "lvv";


1
Ele disse que sistema operacional ele está usando? Aanswer é completamente como questão;)
Norbert Orzechowicz

No entanto, isso não resulta em uma sequência de várias linhas, conforme solicitado em questão.
ToolmakerSteve


0

Para colocar as seqüências de caracteres "l" e "vv" em linhas separadas apenas no código:

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

Neste exemplo, você está dizendo para anexar .=a string ao final da versão anterior dessa variável de string. Lembre-se de que = é apenas um operador de atribuição, portanto, no seu código original, você está atribuindo à variável um novo valor de string.

Para colocar as seqüências de caracteres "l" e "vv" em linhas separadas apenas no eco:

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

Você não precisa de várias strings nesse caso, pois o novo caractere de linha \ncuidará disso para você.

Para colocar as seqüências de caracteres "l" e "vv" em linhas separadas no código e ao ecoar:

$xml = "l";
$xml .= "\nvv"
echo $xml;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.