Làm thế nào để kết hợp hai chuỗi với nhau trong PHP?


140

Tôi thực sự không biết làm thế nào để mô tả những gì tôi muốn nhưng tôi sẽ chỉ cho bạn:

Ví dụ:

$data1 = "the color is";
$data2 = "red";

Tôi nên làm gì (hoặc xử lý) để kết quả $ là sự kết hợp của $data1$data2?

Kết quả như ý:

$result = "the color is red";

13
Điều này được gọi là "nối chuỗi" và không nên xa lạ hơn so +với số. Hãy bắt đầu với một cuốn sách / hướng dẫn và làm quen với các toán tử cơ bản trong ngôn ngữ.

1
Có rất nhiều cách để làm điều đó. nếu bạn thấy câu trả lời bạn có thể kiểm tra nó nhưng sử dụng đơn giản nhất. ví dụ $ result = "$ data1 $ data2"; đó là nó. hoặc $ result = $ data1. $ data2;
jewhuq

1
@Machavity bạn có thể nâng mức độ bảo vệ một cách kỳ diệu để các bài viết dư thừa không tiếp tục chồng chất trên trang này không?
mickmackusa

Câu trả lời:


206
$result = $data1 . $data2;

Điều này được gọi là nối chuỗi. Ví dụ của bạn thiếu một khoảng trống, vì vậy, cụ thể, bạn sẽ cần:

$result = $data1 . ' ' . $data2;

85

Có một số cách để nối hai chuỗi với nhau.

Sử dụng toán tử ghép .(và .=)

Trong PHP .là toán tử ghép nối trả về phép nối của các đối số phải và trái của nó

$data1 = "the color is";
$data2 = "red";
$result = $data1 . ' ' . $data2;

Nếu bạn muốn nối một chuỗi vào một chuỗi khác, bạn sẽ sử dụng .=toán tử:

$data1 = "the color is ";
$data1 .= "red"

Cú pháp phức tạp (xoăn) / chuỗi trích dẫn kép

Trong các biến PHP chứa trong các chuỗi trích dẫn kép được nội suy (nghĩa là các giá trị của chúng được "tráo đổi" cho biến). Điều này có nghĩa là bạn có thể đặt các biến thay cho các chuỗi và chỉ cần đặt một khoảng trắng ở giữa chúng. Các dấu ngoặc nhọn làm cho nó rõ ràng nơi các biến.

$result = "{$data1} {$data2}";

Lưu ý: điều này cũng sẽ hoạt động mà không cần niềng răng trong trường hợp của bạn:

$result = "$data1 $data2";

Bạn cũng có thể nối các giá trị mảng bên trong một chuỗi:

$arr1 = ['val' => 'This is a'];
$arr2 = ['val' => 'test'];
$variable = "{$arr1['val']} {$arr2['val']}";

Sử dụng sprintf()hoặcprintf()

sprintf()cho phép chúng tôi định dạng chuỗi bằng các tùy chọn định dạng mạnh mẽ. Nó là quá mức cần thiết cho việc ghép đơn giản như vậy nhưng nó rất tiện lợi khi bạn có một chuỗi phức tạp và / hoặc muốn thực hiện một số định dạng của dữ liệu.

$result = sprintf("%s %s", $data1, $data2);

printf() làm điều tương tự nhưng sẽ ngay lập tức hiển thị đầu ra.

printf("%s %s", $data1, $data2);
// same as
$result = sprintf("%s %s", $data1, $data2);
echo $result;

Di truyền

Heredocs cũng có thể được sử dụng để kết hợp các biến thành một chuỗi.

$result= <<<EOT
$data1 $data2
EOT;

Sử dụng ,vớiecho()

Điều này chỉ hoạt động khi lặp lại nội dung và không gán cho một biến. Nhưng bạn có thể sử dụng dấu phẩy để phân tách danh sách các biểu thức cho PHP để lặp lại và sử dụng một chuỗi có một khoảng trắng làm một trong các biểu thức đó:

echo $data1, ' ', $data2;

21

Không ai đề cập đến điều này nhưng có khả năng khác. Tôi đang sử dụng nó cho các truy vấn sql lớn. Bạn có thể sử dụng. = Toán tử :)

$string = "the color is ";
$string .= "red";

echo $string; // gives: the color is red

"Tôi đang sử dụng nó cho các truy vấn sql lớn." - lưu ý rằng đó là một cách điển hình để nhận en.wikipedia.org/wiki/Query_injection
giảm hoạt động

Làm thế nào chính xác chuỗi nối này hoặc cách khác sẽ cho tôi tiêm sql trong truy vấn tham số của tôi?
tên mã

Xây dựng thủ công toàn bộ các truy vấn SQL (ít nhất là được đề xuất bởi "cho các truy vấn sql lớn") không ổn. Chuẩn bị chỉ các tham số, không phải toàn bộ truy vấn nên an toàn trước rủi ro bảo mật cụ thể này.
giảm hoạt động

19

Nối chúng với .toán tử:

$result = $data1 . " " . $data2;

Hoặc sử dụng phép nội suy chuỗi:

$result = "$data1 $data2";

11
$result = implode(' ', array($data1, $data2));

là chung chung hơn.


1
điều này rất hữu ích trong trường hợp bạn muốn tạo một danh sách phân cách vì nó kiểm tra xem các vars có bất kỳ giá trị $email_to = implode(', ', array($addr1, $addr2, addr3));nào không cần if($addr != '')vv hay không
Aba

4
Đừng chọn các hàm mảng, trừ khi bạn phải. Bởi vì chức năng mảng luôn luôn chậm hơn các toán tử. Ngoài ra; họ sử dụng nhiều ram hơn.
Mert DOĞAN

9

Một hình thức khác có sẵn là đây:

<?php
$data1 = "the color is";
$data2 = "red";
$result = "{$data1} {$data2}";


5

Một khoảng thời gian được sử dụng để nối chuỗi. Ví dụ đơn giản để biến hai biến chuỗi thành một biến duy nhất:

$full = $part1 . $part2;

Trong ví dụ của bạn, bạn muốn làm:

$result = $data1 . ' ' . $data2;

Bạn sẽ nhận thấy tôi đã thêm một chuỗi một khoảng trắng giữa hai biến. Điều này là do bản gốc của bạn $data1không kết thúc bằng một khoảng trắng. Nếu bạn đã kết hợp chúng mà không có nó, $resultbiến của bạn sẽ trông giống như vậy the color isred.


5

Bạn có thể làm điều này bằng PHP:

$txt1 = "the color is";
$txt2 = " red!";
echo $txt1.$txt2;

Điều này sẽ kết hợp hai chuỗi và thông số sẽ là: "màu đỏ!".


1
Các giá trị đầu vào bịa đặt của bạn không đại diện cho chuỗi đầu vào của OP và bạn đang lặp lại các giải pháp đã được nêu NĂM trước đó. Đây không phải là một câu hỏi javascript để lời khuyên là không liên quan. Bài đăng này không thêm giá trị cho trang.
mickmackusa

@mickmackusa, ok Tôi đã cập nhật văn bản, bạn nói đúng nhưng tôi đã trả lời js ở đây vì đây là câu hỏi rất cơ bản để người dùng có thể tìm hiểu sự khác biệt
sunil

1
Bản cập nhật của bạn KHÔNG sử dụng văn bản của OP. Không cung cấp giải pháp javascript cho câu hỏi php. Câu trả lời này được định dạng kém và không thêm giá trị cho trang.
mickmackusa

4
$s = "my name is ";

$s .= "keyur";

echo $s; 

kết quả:

my name is keyur

9
Chào mừng bạn đến với StackOverflow. Nó là tốt đẹp, nếu bạn trả lời câu hỏi. Tuy nhiên, nếu bạn làm, xin vui lòng định dạng nó một cách thích hợp. Hơn nữa, câu trả lời của bạn đã được đưa ra. Làm thế nào để nó thêm giá trị bổ sung cho bài viết bốn năm tuổi này?
T3 H40

6
Đây chỉ là một sự lặp lại của các câu trả lời hiện có.
Pang

4
$result = $data1 . $data2;

thử cái này


5
Đây không phải là câu trả lời đúng. kết quả là "màu sắc bị hủy bỏ". Ngoài ra, câu trả lời của bạn được nhân đôi từ câu trả lời của ai đó được đăng cách đây nhiều năm. Xuống bình chọn.
Jason Liu


0

Tôi không rõ ràng chính xác với những yêu cầu của bạn là gì nhưng về cơ bản, bạn có thể định nghĩa riêng biệt hai biến và sau đó kết hợp chúng lại với nhau.

$data1="The colour is ";
$data2="red";

$result=$data1.$data2;

Bằng cách làm như vậy, bạn thậm chí có thể khai báo $ data2 là mức toàn cầu để bạn có thể thay đổi giá trị của nó trong khi thực hiện, ví dụ, nó có thể nhận được câu trả lời "đỏ" từ hộp kiểm.


0

kết hợp hai chuỗi với nhau trong PHP?

$result = $data1 . ' ' . $data2;

2
Câu trả lời này không cung cấp gì những câu trả lời khác chưa được cung cấp và không đưa ra lời giải thích nào về lý do hoặc cách thức hoạt động của câu trả lời này.
John Conde

-1

1.Xác định chuỗi (khoảng trắng giữa mỗi chuỗi)

Đoạn mã:

<?php
 $txt1 = "Sachin";
 $txt2 = "Tendulkar";

 $result = $txt1.$txt2 ;
 echo  $result. "\n";
 ?>  

Đầu ra: SachinTendulkar

2.Xác định chuỗi nơi tồn tại không gian

Đoạn mã:

<?php
 $txt1 = "Sachin";
 $txt2 = "Tendulkar";

 $result = $txt1." ".$txt2; 
 echo  $result. "\n";
?>  

Đầu ra: Sachin Tendulkar

  1. Nối chuỗi bằng hàm printf.

Đoạn mã:

  <?php
 $data1 = "Sachin";
 $data2 = "Tendulkar";
 printf("%s%s\n",$data1, $data2);
 printf("%s %s\n",$data1, $data2); 
?>

Đầu ra:
SachinTendulkar
Sachin Tendulkar


4
Câu trả lời này cung cấp những gì chưa được cung cấp bởi các câu trả lời khác?
John Conde

@rashingcs Hoạt động tuyệt vời cho tôi !! 🏏
IPSDSILVA

-1

Tôi tin rằng cách hiệu quả nhất là:

$data1 = "the color is";
$data2 = "red";
$result = $data1 . ' ' . $data2;

Nếu bạn muốn triển khai bản địa hóa, bạn có thể làm một cái gì đó như thế này:

$translationText = "the color is %s";
$translationRed  = "red";
$result = sprintf($translationText, $translationRed);

Nó chậm hơn một chút, nhưng nó không giả định các quy tắc ngữ pháp.


-3

Hãy thử điều này, chúng ta có thể nối thêm chuỗi trong php bằng ký hiệu dấu chấm (.)

$data1 = "the color is";
$data2 = "red";

echo $data1.$data2; //the color isred
echo $data1." ".$data2; // the color is red (we have appended space)

1
Câu trả lời này không cung cấp gì những câu trả lời khác chưa được cung cấp.
John Conde
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.