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


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

$foo =. 'bar';

không hoạt động.

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


76
2017-08-18 17:50


gốc


$bar .= $foo? - James Allardice
Tôi xác nhận cho James 'mặc dù anh ta nên viết một câu trả lời cho nó ... - Christian
Điều đó phụ thêm $foo đến $bar, thay vì thêm vào $bar đến $foo. Kết quả là tương tự, nhưng tôi nghĩ anh ấy muốn thay đổi $foo. - Eric V
Nó có nghĩa là có một chút bình luận lưỡi-trong-má (đó 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
ugh ... xin lỗi, ví dụ xấu ... đã sửa ngay bây giờ :) - yuttadhammo


Các câu trả lời:


Không. Nhưng bạn có thể làm

$foo = "bar" . $foo

109
2017-08-18 17:52



., không phải +... - Marc B
Urgh bạn nói đúng. Gần đây tôi đã làm quá nhiều JavaScript. - Eric V
vâng, nhưng khi nó trông giống như: $foo['bar']['bork'][$bork] = 'bar'.$foo['bar']['bork'][$bork]; bạn bắt đầu tự hỏi tại sao không chỉ có một lối tắt như thế. = - yuttadhammo
@ Chris - IS không :) - yuttadhammo
@Smar bạn đã rất gần! Bạn chỉ có thể chuyển tham chiếu đến $ temp. $array['with']['really']['long']['variable'] = 'world'; $temp = &$array['with']['really']['long']['variable']; $temp = 'Hello '.$temp;   3v4l - Blakethepatton


Bạn luôn có thể làm cho chức năng của riêng bạn cho điều đó:

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

$string sẽ là phần mà bạn muốn thêm vào và $chunk sẽ là văn bản mà bạn muốn cái gì đó được thêm vào nó.

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


4
2017-08-18 18:03



Thực hiện tốt, nhưng nó không thực sự làm mọi thứ dễ dàng hơn :) - yuttadhammo
Cảm ơn, bạn là đúng mặc dù. Nó chắc chắn không dễ dàng hoặc nhanh chóng như một cái gì đó được xây dựng in Hãy thoải mái sao chép và dán nếu điều đó giúp làm cho nó dễ dàng hơn: D - Aaron
Nếu có gì đó !emptynó cũng luôn luôn isset, không cần kiểm tra hai lần này. Hơn nữa, kể từ đó $chunk là một tham số bắt buộc của hàm, nó nhu cầu được chuyển đến hàm hoặc 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ếu nó bịnh a.k.a. "trống"). Nhưng nếu $chunk không chứa bất cứ điều gì, không có gì sẽ xảy ra anyway. Vì vậy, toàn bộ cơ quan 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 là khá không cần thiết. - deceze♦
Bạn có thể có một biến được đặt nhưng cũng trống. Ví dụ: biến có giá trị "" trống nhưng cũng được đặt. - Aaron
Có, nhưng tôi nói chức năng của bạn là một cách rất tiết kiệm để viết $foo . $bar. Tôi thách thức bạn để tìm thấy bất kỳ trường hợp quan trọng là chức năng của bạn làm bất cứ điều gì khác nhau. :) - deceze♦


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

Bạn có thể muốn xem xét việc sử dụng sprintf (tài liệu) gia đình của các chức năng cho chuỗi nối. Nó cung cấp nhiều hơn nữa sanitization và khả năng sử dụng hơn là chỉ kết hợp hai dây với các nhà khai thác chuyển nhượng.

$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 các mảng dễ quản lý các vị trí giá trị hơn so với các đối số riêng lẻ.

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

Ngoài ra với một mảng các giá trị, người ta có thể đơn giản implode tập hợp các giá trị cho nối chuỗi đơn giản.

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

3
2018-02-25 15:07



Thật không may, tôi không nghĩ rằng sprintf () là nhanh như concats đơn giản. Và nó chắc chắn dường như 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 chắn về ý nghĩa của cú pháp của bạn bằng cú pháp. Trong khi nó không phải là nhanh hay đơn giản như nối. sprintf thường được sử dụng trong nhiều ngôn ngữ. sprintf có vị trí và mục đích của nó khi sử dụng nó. 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ối đơn giản khi cần thiết. 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 nối. - fyrye


Bạn có thể bọc chức năng tích hợp sẵn substr_replace, trong đó đối số $ start và $ length có thể được đặt là 0, nó sẽ thêm chuỗi $ $ vào $ string và trả về kết quả, như sau:

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

Một ví dụ về cách 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 đang vào lập trình thủ tục, đó là.


2
2017-12-06 18:58



Tôi không thấy sự quan tâm của việc sử dụng substr_replace; làm một cách đơn giản $string = $prefix.$string; trong các chức năng sẽ làm các trick. - Pierre-Olivier Vares


Quay Bình luận của Blakethepatton vào 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à bằng cách sử dụng tài liệu tham khảo với biến như sau:

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

Điều này sẽ giúp bạn ghi đè lên câu trả lời của Eric V nếu tên biến ban đầu của bạn dài từ 12 ký tự trở lên.

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

$f = 'bar' . ($f = &$foo);

1
2018-04-24 13:33