Багаторядкові рядки в PHP


141

Поміркуйте:

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

echo $xml;

Це відлучить vv . Чому і як я можу робити багаторядкові рядки для таких речей, як SimpleXML тощо?


1
Ви хочете, щоб у наступному рядку лунало відповідь "l", а потім "vv"?
Майк Самуель

3
Подивіться concatenation. Так називається, коли ви збираєте рядки.
Crashspeeder

14
@haywire Першим і корисним результатом в Google.
Cees Timmerman

Відповіді:


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: Ummm ... Що?
Привид

1
Приклад. while ($ rc = mysql_fetch_array ($ adviews)) {$ xml. = "<set name = '". $ rc ["date"]. "' value = '1' hoverText = '". $ rc ["дата" ]. "'/>"; } $ xml. = "</graph>";
TheBlackBenzKid

3
@Pacerier Не потрібно уникати цитат всередині гередока.
Привид

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";

Це також дозволяє мені відступати, але я хочу.


5

Іншим рішенням є використання буферизації вихідних даних , ви можете збирати все, що виводиться / повторюється, і зберігати їх у змінній.

<?php
ob_start(); 

?>line1
line2
line3<?php 

$xml = ob_get_clean();

Зверніть увагу, що буферизація на виході може виявитися не найкращим рішенням з точки зору продуктивності та чистоти коду для цього конкретного випадку, але варто залишити його для ознайомлення.


2

Може спробувати ". =" Indead з "="?

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

дасть вам "lvv";


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;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.