Mehrzeilige Zeichenfolgen in PHP

141

Erwägen:

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

echo $xml;

Dies wird vv wiedergeben . Warum und wie kann ich mehrzeilige Zeichenfolgen für Dinge wie SimpleXML usw. erstellen ?

TheBlackBenzKid
quelle
1
Möchten Sie, dass in der nächsten Zeile "l" gefolgt von "vv" angezeigt wird?
Mike Samuel
3
Schau auf concatenation. So heißt es, wenn man Strings zusammensetzt.
Crashspeeder
14
@haywire Als erstes und hilfreiches Ergebnis bei Google.
Cees Timmerman

Antworten:

261

Gut,

$xml = "l
vv";

Funktioniert.

Sie können auch Folgendes verwenden:

$xml = "l\nvv";

oder

$xml = <<<XML
l
vv
XML;

Bearbeiten basierend auf Kommentar:

Sie können Zeichenfolgen mit dem .=Operator verketten .

$str = "Hello";
$str .= " World";
echo $str; //Will echo out "Hello World";
Madaras Geist
quelle
5
Sie haben vergessen, ob ich Loops oder MySQL habe, während Loops dazwischen. Danke
TheBlackBenzKid
87
@TheBlackBenzKid: Ähm ... Was?
Madaras Geist
1
Beispiel. while ($ rc = mysql_fetch_array ($ adviews)) {$ xml. = "<set name = '". $ rc ["date"]. "' value = '1' hoverText = '". $ rc ["date" ]. "'/>"; } $ xml. = "</ graph>";
TheBlackBenzKid
3
@Pacerier Sie müssen Anführungszeichen innerhalb eines Heredocs nicht entkommen.
Madaras Geist
7
@ Pacerier Du hast gefragt, warum wir uns mit Heredoc über Zitate beschäftigen müssen. Deshalb. Beides sind Optionen für mehrzeilige Zeichenfolgen.
Madaras Geist
139

PHP verfügt über Heredoc- und Nowdoc-Zeichenfolgen, mit denen sich mehrzeilige Zeichenfolgen in PHP am besten verarbeiten lassen.

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;

Ein Nowdoc ist wie ein Heredoc, ersetzt jedoch keine Variablen.

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

Beachten Sie, dass das End-Token EODüberhaupt nicht eingerückt werden darf, da PHP dies sonst nicht bestätigt. Außerdem müssen Sie nicht " EOD" verwenden. Es kann eine beliebige Zeichenfolge sein.

Dan Fabulich
quelle
8
Upvoted, weil ich die Einrückung immer vergesse.
Matuszek
8
$xml="l" . PHP_EOL;
$xml.="vv";
echo $xml;

Wird widerhallen:

l
vv

Dokumentation zu PHP_EOL .

Ryan
quelle
Bevorzugt. @ Pacerier
TheBlackBenzKid
Gibt es eine Möglichkeit, Antworten zu markieren? Ich habe immer gedacht, dass man das nur bei Fragen machen kann. @ TheBlackBenzKid
Pacerier
Ich meinte, ich gab ihm ein Plus von +1, als ich ihn wieder aufbaute.
TheBlackBenzKid
@ TheBlackBenzKid "favorisiert";)
Andrés Morales
8

Ich bin mir nicht sicher, wie es sich in Bezug auf die Leistung stapelt, aber für Orte, an denen es nicht wirklich wichtig ist, mag ich dieses Format, weil ich sicher sein kann, dass es \ r \ n (CRLF) verwendet und nicht das Format, in dem meine PHP-Datei gerade ist gespeichert in.

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

Es lässt mich auch einrücken, wie ich will.

eselk
quelle
5

Eine andere Lösung ist die Verwendung der Ausgabepufferung . Sie können alles, was ausgegeben / wiedergegeben wird, sammeln und in einer Variablen speichern.

<?php
ob_start(); 

?>line1
line2
line3<?php 

$xml = ob_get_clean();

Bitte beachten Sie, dass die Ausgabepufferung in Bezug auf Leistung und Code-Sauberkeit möglicherweise nicht die beste Lösung für diesen genauen Fall ist, es sich jedoch lohnt, sie hier als Referenz zu belassen.

Xavi Esteve
quelle
2

Vielleicht versuchen Sie ". =" Indead von "="?

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

wird dir "lvv" geben;

Norbert Orzechowicz
quelle
1
Hat er gesagt, welches Betriebssystem er benutzt? Aanswer ist vollständig als Frage;)
Norbert Orzechowicz
Dies führt jedoch nicht zu einer mehrzeiligen Zeichenfolge, wie in Frage gestellt.
ToolmakerSteve
0

So setzen Sie die Zeichenfolgen "l" und "vv" allein im Code in separate Zeilen:

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

In diesem Fall möchten Sie anhängen .= die Zeichenfolge an das Ende der vorherigen Version dieser Zeichenfolgenvariablen . Denken Sie daran, dass = nur ein Zuweisungsoperator ist. In Ihrem ursprünglichen Code weisen Sie der Variablen einen neuen Zeichenfolgenwert zu.

So setzen Sie die Zeichenfolgen "l" und "vv" allein im Echo in separate Zeilen:

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

In diesem Fall benötigen Sie nicht mehrere Zeichenfolgen als neues Zeilenzeichen \n für Sie erledigt.

So setzen Sie die Zeichenfolgen "l" und "vv" in separate Zeilen im Code und beim Echo:

$xml = "l";
$xml .= "\nvv"
echo $xml;
Shawn Solomon
quelle