Bất kỳ tương đương với. = Để thêm vào đầu chuỗi trong PHP?


103

Chỉ cần tự hỏi nếu có một cái gì đó giống như. = Để thêm văn bản vào đầu chuỗi, ví dụ:

$foo =. 'bar';

mà không hoạt động.

Chỉnh sửa: ví dụ ban đầu $foo =. $bar;có thể đạt được với$bar .= $foo;


Tôi xác nhận cho James 'mặc dù lẽ ra anh ấy phải viết câu trả lời cho nó ...
Christian

6
Đó là gắn thêm $foovào $bar, thay vì thêm vào trước $barđể $foo. Kết quả là tương tự, nhưng tôi nghĩ anh ấy muốn đột biến $foo.
Eric V

Nó có nghĩa là một chút bình luận đầu môi (đó là lý do tại sao nó là một bình luận, không phải là một câu trả lời)!
James Allardice

1
ugh ... xin lỗi, ví dụ xấu ... cố định bây giờ :)
yuttadhammo

Câu trả lời:



4

Bạn luôn có thể tạo chức năng của riêng mình cho điều đó:

function prepend($string, $chunk) {
     if(!empty($chunk) && isset($chunk)) {
        return $string.$chunk;
     }
     else {
        return $string;
     }
}

$stringsẽ là đoạn mà bạn muốn thêm vào trước và $chunksẽ là văn bản mà bạn muốn thêm một thứ gì đó vào đó.

Bạn có thể nói rằng việc kiểm tra là tùy chọn, nhưng bằng cách có nó trong đó, bạn không cần phải lo lắng về việc vô tình chuyển giá trị null.


1
Cảm ơn, bạn đã đúng. Nó chắc chắn không dễ dàng hoặc nhanh như một cái gì đó được tích hợp sẵn. Hãy sao chép và dán nếu điều đó giúp bạn dễ dàng hơn: D
Aaron

7
Nếu có điều gì đó thì !emptynó cũng luôn luôn isset, không cần kiểm tra lại. Hơn nữa, vì $chunklà một tham số bắt buộc của hàm nên nó cần được chuyển cho hàm nếu không PHP sẽ khiếu nại. Điều này có nghĩa là séc này có thể được viết tắt thành if ($chunk)(để xem nó có giả mạo hay không còn được gọi là "trống"). Nhưng, nếu $chunkkhông chứa bất cứ thứ gì, thì sẽ không có gì xảy ra. Vì vậy, toàn bộ thân chức năng này có thể được viết tắt thành return $string . $chunk. Có nghĩa là toàn bộ chức năng này khá không cần thiết.
dối trá

1
Bạn có thể đặt một biến nhưng cũng có thể để trống. Ví dụ, một biến có giá trị là "" trống nhưng cũng được đặt.
Aaron

1
Có, nhưng tôi đang nói rằng hàm của bạn là một cách viết rất dài dòng $foo . $bar. Tôi thách thức bạn tìm thấy bất kỳ trường hợp quan trọng nào chức năng của bạn làm bất cứ điều gì khác biệt. :)
dối trá

3

Tôi biết điều này đã được hỏi / trả lời cách đây một thời gian, nhưng cung cấp câu trả lời này vì nó tương đương về mặt chức năng mặc dù nó không phải là một toán tử gán và không ai nhận xét về việc sử dụng nó để nối chuỗi chung.

Bạn có thể muốn xem xét việc sử dụng họ hàm sprintf( tài liệu ) để nối chuỗi. Nó cung cấp nhiều khả năng sử dụng và làm sạch hơn là chỉ kết hợp hai chuỗi với các toán tử gán.

$foo = 'foo';

$append = sprintf('%1$s%2$s', $foo, 'bar');
var_dump($append);
/* string(6) "foobar" */

$prepend = sprintf('%1$s%2$s', 'bar', $foo);
var_dump($prepend);
/* string(6) "barfoo" */

$prependInvert = sprintf('%2$s%1$s', $foo, 'bar');
var_dump($prependInvert);
/* string(6) "barfoo" */

$wrap = sprintf('%2$s%1$s%2$s', $foo, 'bar');
var_dump($wrap);
/* string(6) "barfoobar" */

Tôi thường sử dụng vsprintf, vì làm việc với mảng dễ quản lý các vị trí giá trị hơn các đối số riêng lẻ.

$vprepend = vsprintf('%2$s%1$s', array('foo', 'bar'));
var_dump($vprepend);
/* string(6) "barfoo" */

Cũng với một mảng giá trị, người ta có thể chỉ cần implodetập hợp giá trị kết quả để nối chuỗi đơn giản.

 var_dump(implode('', array('bar', 'foo')));
 /* string(6) "barfoo" */

Thật không may, tôi không nghĩ rằng sprintf () nhanh như các kết nối đơn giản. Và chắc chắn nó cũng không thân thiện với cú pháp. Xem: stackoverflow.com/q/7147305/2430549
HoldOffHunger

Đúng, mặc dù không chắc bạn muốn nói thế nào về sự thân thiện với cú pháp. Mặc dù nó không nhanh hoặc đơn giản như nối. sprintfthường được sử dụng trong nhiều ngôn ngữ. sprintfcó vị trí và mục đích sử dụng khi nào. ví dụ. đúc nhiều giá trị hoặc thực thi một số đầu vào bằng cách sử dụng sprintf, cung cấp cho bạn nhiều chức năng hơn so với ghép đơn giản khi được yêu cầu . Hãy xem: 3v4l.org/8PWil Nhưng nó không nên được sử dụng như một sự thay thế hoàn toàn cho phép nối.
fyrye

3

Bạn có thể bao bọc hàm tích hợp sẵn, trong substr_replaceđó các đối số $ start và $ length có thể được đặt thành 0, điều này sẽ thêm $ thay thế thành $ string và trả về kết quả, như sau:

function prepend(& $string, $prefix) {
    $string = substr_replace($string, $prefix, 0, 0);
}

Một ví dụ sử dụng hàm trợ giúp sẽ là:

$email_message = "Jonathan";
$appropriate_greeting = "Dear ";
prepend($email_message, $appropriate_greeting);
echo $email_message;

Nếu bạn thích lập trình thủ tục, đó là.


Tôi không thấy hứng thú khi sử dụng substr_replace; thực hiện một đơn giản $string = $prefix.$string;trong hàm sẽ làm được thủ thuật.
Pierre-Olivier Vares

2

Biến nhận xét của Blakethepatton thành một câu trả lời (cảm ơn bạn), một cách để làm điều này gọn gàng hơn cho các tên biến dài hơn là sử dụng một tham chiếu đến biến như sau:

$f = &$foo; $f = "bar{$f}";

Điều này sẽ giúp bạn tiết kiệm việc gõ câu trả lời của Eric V nếu tên biến ban đầu của bạn dài 12 ký tự trở lên.

Một thay thế trên một dòng:

$f = 'bar' . ($f = &$foo);
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.