Stringhe multilinea in PHP


141

Tener conto di:

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

echo $xml;

Questo farà eco a vv . Perché e come posso fare stringhe multilinea per cose come SimpleXML , ecc.?


1
Vuoi che faccia eco "l" seguito da "vv" nella riga successiva?
Mike Samuel,

3
Guarda in alto concatenation. Ecco come si chiama quando si mettono insieme le stringhe.
Crashspeeder

14
@haywire Essendo il primo e utile risultato su Google.
Cees Timmerman,

Risposte:


262

Bene,

$xml = "l
vv";

Lavori.

È inoltre possibile utilizzare quanto segue:

$xml = "l\nvv";

o

$xml = <<<XML
l
vv
XML;

Modifica in base al commento:

È possibile concatenare le stringhe utilizzando l' .=operatore.

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

5
Hai dimenticato se ho dei loop o MySQL mentre sono in loop. Grazie
TheBlackBenzKid

89
@TheBlackBenzKid: Ummm ... Cosa?
Madara's Ghost

1
Esempio. while ($ rc = mysql_fetch_array ($ adviews)) {$ xml. = "<set name = '". $ rc ["date"]. "' value = '1' hoverText = '". $ rc ["date" ] "'/>."; } $ xml. = "</graph>";
TheBlackBenzKid

3
@Pacerier Non è necessario sfuggire alle citazioni all'interno di una eredità.
Madara's Ghost

7
@Pacerier Hai chiesto perché dobbiamo preoccuparci di ereditare le citazioni. Ecco perchè. Entrambe sono opzioni per stringhe multilinea.
Madara's Ghost

139

PHP ha stringhe Heredoc e Nowdoc, che sono il modo migliore per gestire stringhe multilinea in 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;

Un Nowdoc è come un Heredoc, ma non sostituisce le variabili.

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

Fai attenzione che il token finale EODnon deve essere affatto rientrato, altrimenti PHP non lo riconoscerà. Inoltre, non è necessario utilizzare " EOD"; può essere qualsiasi stringa tu voglia.


8
Eseguito l'upgrade perché mi dimentico sempre del rientro.
Matuszek,


8

Non sono sicuro di come si accumuli in termini di prestazioni, ma per i luoghi in cui non importa davvero, mi piace questo formato perché posso essere sicuro che stia usando \ r \ n (CRLF) e non in qualunque formato il mio file PHP sia salvato in.

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

Mi fa anche rientrare come voglio.


5

Un'altra soluzione è utilizzare il buffering dell'output , è possibile raccogliere tutto ciò che viene emesso / echo e archiviarlo in una variabile.

<?php
ob_start(); 

?>line1
line2
line3<?php 

$xml = ob_get_clean();

Si noti che il buffering dell'output potrebbe non essere la soluzione migliore in termini di prestazioni e pulizia del codice per questo caso esatto, ma vale la pena lasciarlo qui come riferimento.


2

Forse prova ". =" Indead of "="?

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

ti darà "lvv";


1
Ha detto che sta usando il sistema operativo strega? Aanswer è completamente una domanda;)
Norbert Orzechowicz,

Tuttavia, ciò non si traduce in una stringa multilinea come richiesto in questione.
ToolmakerSteve


0

Per mettere le stringhe "l" e "vv" su righe separate nel solo codice:

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

In questo caso stai dicendo di aggiungere .=la stringa alla fine della versione precedente di quella variabile di stringa. Ricorda che = è solo un operatore di assegnazione, quindi nel tuo codice originale stai assegnando alla variabile un nuovo valore di stringa.

Per mettere le stringhe "l" e "vv" su righe separate solo nell'eco:

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

Non hai bisogno di più stringhe in questo caso, poiché il nuovo carattere di linea \nsi occuperà di quello per te.

Per mettere le stringhe "l" e "vv" su righe separate nel codice e durante l'eco:

$xml = "l";
$xml .= "\nvv"
echo $xml;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.