Многострочные строки в PHP

141

Рассматривать:

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

echo $xml;

Это будет эхом vv . Почему и как я могу создавать многострочные строки для таких вещей, как SimpleXML и т. Д.?

TheBlackBenzKid
источник
1
Вы хотите, чтобы это повторило "l", сопровождаемое "vv" на следующей строке?
Майк Сэмюэл
3
Посмотрите concatenation. Вот как это называется, когда вы собираете строки.
Crashspeeder
14
@haywire Быть первым и полезным результатом в Google.
Сис Тиммерман

Ответы:

262

Хорошо,

$xml = "l
vv";

Работает.

Вы также можете использовать следующее:

$xml = "l\nvv";

или

$xml = <<<XML
l
vv
XML;

Редактировать на основе комментария:

Вы можете объединять строки, используя .=оператор.

$str = "Hello";
$str .= " World";
echo $str; //Will echo out "Hello World";
Призрак Мадары
источник
5
Вы забыли, есть ли у меня циклы или MySQL, пока циклы между. Спасибо
TheBlackBenzKid
89
@TheBlackBenzKid: Ммм ... Что?
Призрак Мадары
1
Пример. while ($ rc = mysql_fetch_array ($ adviews)) {$ xml. = "<set name = '". $ rc ["date"]. "' value = '1' hoverText = '". $ rc ["date" ] "" />". } $ xml. = "</ graph>";
TheBlackBenzKid
3
@Pacerier Вам не нужно избегать кавычек внутри heredoc.
Призрак Мадары
7
@Pacerier Вы спросили, почему мы должны беспокоиться по поводу кавычек. Поэтому. Оба варианта для многострочных строк.
Призрак Мадары
139

В PHP есть строки Heredoc и Nowdoc, которые являются лучшим способом обработки многострочных строк в 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 похож на Heredoc, но он не заменяет переменные.

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

Помните, что конечный токен EODвообще не должен иметь отступ, иначе PHP его не признает. Кроме того, вам не нужно использовать " EOD"; это может быть любая строка, которую вы хотите.

Дан Фабулич
источник
8
Проголосовал, потому что я всегда забываю об отступах.
Матушек
8
$xml="l" . PHP_EOL;
$xml.="vv";
echo $xml;

Будет эхом

l
vv

Документация по PHP_EOL .

Райан
источник
Избранные. @Pacerier
TheBlackBenzKid
Есть ли способ отметить ответы? Я всегда думал, что ты можешь делать это только с вопросами. @TheBlackBenzKid
Pacerier
Я имел в виду, что дал ему плюс +1, когда я его подзарядил.
TheBlackBenzKid
@TheBlackBenzKid "faved";)
Андрес Моралес
8

Не уверен, как это складывается с точки зрения производительности, но для мест, где это на самом деле не имеет значения, мне нравится этот формат, потому что я могу быть уверен, что он использует \ r \ n (CRLF), а не тот формат, в котором мой PHP-файл оказался сохранено в

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

Это также позволяет мне делать отступы так, как я хочу.

eselk
источник
5

Другое решение - использовать буферизацию вывода , вы можете собрать все, что выводится / выводится, и сохранять его в переменной.

<?php
ob_start(); 

?>line1
line2
line3<?php 

$xml = ob_get_clean();

Обратите внимание, что буферизация вывода может быть не лучшим решением с точки зрения производительности и чистоты кода для этого конкретного случая, но стоит оставить его здесь для справки.

Хави Эстеве
источник
2

Может быть, попробовать ". =" Indead of "="?

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

даст вам "лвв";

Норберт Ожехович
источник
1
Он сказал, что использует операционную систему ведьмы? Aanswer полностью как вопрос;)
Норберт Ожехович
Тем не менее, это не приводит к многострочной строке в соответствии с запросом.
ToolmakerSteve
0

Чтобы поместить строки "l" и "vv" в отдельные строки только в коде:

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

В этом случае вы говорите добавить .=строку в конец предыдущей версии этой строковой переменной. Помните, что = является только оператором присваивания, поэтому в исходном коде вы присваиваете переменной новое строковое значение.

Чтобы поместить строки "l" и "vv" в отдельные строки только в эхо:

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

Вам не нужно несколько строк в этом случае, так как символ новой строки \nпозаботится об этом за вас.

Чтобы поместить строки "l" и "vv" в отдельные строки кода и при отображении:

$xml = "l";
$xml .= "\nvv"
echo $xml;
Шон Соломон
источник