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

TheBlackBenzKid
fonte
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";
Fantasma de Madara
fonte
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.

Dan Fabulich
fonte
8
Voto positivo, porque eu sempre esqueço o recuo.
Matuszek
8
$xml="l" . PHP_EOL;
$xml.="vv";
echo $xml;

Irá ecoar:

l
vv

Documentação em PHP_EOL .

Ryan
fonte
Favorito. @Pacerier
TheBlackBenzKid
Existe uma maneira de marcar respostas? Eu sempre pensei que você só poderia fazer isso em perguntas. @TheBlackBenzKid
Pacerier
Eu quis dizer que dei a ele mais um +1 quando o reparei.
precisa saber é o seguinte
@TheBlackBenzKid "faved";)
Andrés Morales
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.

eselk
fonte
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.

Xavi Esteve
fonte
2

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

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

lhe dará "lvv";

Norbert Orzechowicz
fonte
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;
Shawn Salomão
fonte