Chuỗi nhiều dòng trong PHP


141

Xem xét:

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

echo $xml;

Điều này sẽ lặp lại vv . Tại sao và làm cách nào tôi có thể thực hiện các chuỗi nhiều dòng cho những thứ như SimpleXML , v.v.?


1
Bạn có muốn nó lặp lại "l" theo sau "vv" trên dòng tiếp theo không?
Mike Samuel

3
Tra cứu concatenation. Đó là những gì nó được gọi khi bạn kết hợp các chuỗi.
Crashspeeder

14
@haywire Bằng cách là kết quả đầu tiên và hữu ích trên Google.
Cees Timmerman

Câu trả lời:


261

Tốt,

$xml = "l
vv";

Làm.

Bạn cũng có thể sử dụng như sau:

$xml = "l\nvv";

hoặc là

$xml = <<<XML
l
vv
XML;

Chỉnh sửa dựa trên nhận xét:

Bạn có thể nối chuỗi bằng .=toán tử.

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

5
Bạn quên nếu tôi có vòng lặp hoặc MySQL trong khi vòng lặp giữa. Cảm ơn
TheBlackBenzKid

88
@TheBlackBenzKid: Ừm ... Cái gì?
Madara's Ghost

1
Thí dụ. while ]. "'/>"; } $ xml. = "</ đồ thị>";
TheBlackBenzKid

3
@Pacerier Bạn không cần phải thoát dấu ngoặc kép bên trong một di sản.
Madara's Ghost

7
@Pacerier Bạn hỏi tại sao chúng ta cần bận tâm với heredoc hơn dấu ngoặc kép. Đó là lý do tại sao. Cả hai đều là tùy chọn cho chuỗi multiline.
Madara's Ghost

139

PHP có các chuỗi Heredoc và Nowdoc, đây là cách tốt nhất để xử lý các chuỗi đa dòng trong PHP.

http://php.net/manual/en/lingu.types.opes.php#lingu.types.opes.syntax.heredoc

$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
$var is replaced automatically.
EOD;

Nowdoc giống như Heredoc, nhưng nó không thay thế các biến.

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

Lưu ý rằng mã thông báo cuối cùng EODkhông được thụt lề, hoặc PHP sẽ không thừa nhận nó. Ngoài ra, bạn không phải sử dụng " EOD"; nó có thể là bất kỳ chuỗi nào bạn muốn


8
Ủng hộ vì tôi luôn quên đi vết lõm.
Matuszek

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

Sẽ lặp lại:

l
vv

Tài liệu về PHP_EOL .


Được ưa chuộng. @Pacerier
TheBlackBenzKid

Có cách nào để đánh dấu câu trả lời? Tôi đã luôn nghĩ rằng bạn chỉ có thể làm điều đó trên các câu hỏi. @TheBlackBenzKid
Pacerier

Tôi có nghĩa là tôi đã cho anh ta cộng +1 khi tôi đẩy anh ta lên.
TheBlackBenzKid

@TheBlackBenzKid "vẫy";)
Andrés Morales

8

Không chắc chắn làm thế nào nó tăng cường hiệu năng, nhưng đối với những nơi không thực sự quan trọng, tôi thích định dạng này vì tôi có thể chắc chắn rằng nó đang sử dụng \ r \ n (CRLF) và không phải bất kỳ định dạng nào mà tệp PHP của tôi xảy ra lưu trong

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

Nó cũng cho phép tôi thụt lề tuy nhiên tôi muốn.


5

Một giải pháp khác là sử dụng bộ đệm đầu ra , bạn có thể thu thập mọi thứ đang được xuất ra / lặp lại và lưu trữ nó trong một biến.

<?php
ob_start(); 

?>line1
line2
line3<?php 

$xml = ob_get_clean();

Xin lưu ý rằng bộ đệm đầu ra có thể không phải là giải pháp tốt nhất về hiệu năng và độ sạch mã cho trường hợp chính xác này nhưng đáng để lại ở đây để tham khảo.


2

Có thể thử ". =" Indead of "="?

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

sẽ cung cấp cho bạn "lvv";


1
Có phải ông nói hệ điều hành phù thủy là ông đang sử dụng? Aanswer hoàn toàn là câu hỏi;)
Norbert Or817owicz

Tuy nhiên, điều đó không dẫn đến một chuỗi nhiều dòng như yêu cầu trong câu hỏi.
ToolmakerSteve


0

Để đặt các chuỗi "l" và "vv" trên các dòng riêng biệt trong mã:

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

Trong trường hợp này, bạn đang nói nối thêm .=chuỗi vào cuối phiên bản trước của biến chuỗi đó. Hãy nhớ rằng = chỉ là một toán tử gán vì vậy trong mã gốc của bạn, bạn đang gán cho biến một giá trị chuỗi mới.

Để đặt các chuỗi "l" và "vv" trên các dòng riêng biệt trong tiếng vang:

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

Bạn không cần nhiều chuỗi trong trường hợp này, vì ký tự dòng mới \nsẽ đảm nhiệm việc đó cho bạn.

Để đặt các chuỗi "l" và "vv" trên các dòng riêng biệt trong mã và khi lặp lại:

$xml = "l";
$xml .= "\nvv"
echo $xml;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.