Adakah yang setara dengan. = Untuk menambahkan ke awal string di PHP?

103

Hanya ingin tahu apakah ada sesuatu seperti. = Untuk menambahkan teks ke awal string, misalnya:

$foo =. 'bar';

yang tidak berhasil.

Edit: contoh awalnya $foo =. $bar;yang dapat dicapai dengan$bar .= $foo;

yuttadhammo
sumber
Saya menjamin James 'meskipun dia seharusnya menulis jawaban untuk itu ...
Christian
6
Itu ditambahkan $fooke $bar, bukannya bersiap $barke $foo. Hasilnya mirip, tapi saya pikir dia ingin bermutasi $foo.
Eric V
Itu dimaksudkan untuk menjadi komentar yang bercanda (itulah sebabnya ini adalah komentar, bukan jawaban)!
James Allardice
1
ugh ... maaf, contoh buruk ... diperbaiki sekarang :)
yuttadhammo

Jawaban:

161

Nggak. Tapi Anda bisa melakukannya

$foo = "bar" . $foo
Eric V.
sumber
4

Anda selalu bisa membuat fungsi Anda sendiri untuk itu:

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

$stringakan menjadi bagian yang ingin Anda tambahkan dan $chunkakan menjadi teks yang Anda inginkan sebagai tambahan di atasnya.

Anda dapat mengatakan bahwa pemeriksaan tersebut opsional, tetapi dengan memilikinya di sana Anda tidak perlu khawatir tentang meneruskan nilai null secara tidak sengaja.

Aaron
sumber
1
Terima kasih, Anda benar. Ini jelas tidak semudah atau secepat sesuatu yang ada di dalamnya. Silakan salin dan tempel jika itu membantu membuatnya lebih mudah: D
Aaron
7
Jika ada sesuatu !emptyitu juga selalu isset, tidak perlu untuk pemeriksaan ulang ini. Lebih jauh lagi, karena $chunkmerupakan parameter yang diperlukan dari suatu fungsi, ia perlu diteruskan ke fungsi atau PHP akan mengeluh. Ini berarti cek ini dapat disingkat if ($chunk)(untuk melihat apakah itu falsy alias "kosong"). Tapi, jika $chunktidak mengandung apa-apa, toh tidak akan terjadi apa-apa. Jadi seluruh badan fungsi ini bisa disingkat return $string . $chunk. Yang berarti seluruh fungsi ini sangat tidak diperlukan.
menipu
1
Anda dapat mengatur variabel tetapi juga kosong. Misalnya, variabel dengan nilai "" kosong tetapi juga disetel.
Aaron
1
Ya, tapi saya katakan fungsi Anda adalah cara menulis yang sangat bertele-tele $foo . $bar. Saya menantang Anda untuk menemukan kasus penting jika fungsi Anda melakukan sesuatu yang berbeda. :)
menipu
3

Saya tahu ini telah ditanyakan / dijawab beberapa waktu yang lalu, tetapi memberikan jawaban ini karena secara fungsional setara meskipun itu bukan operator penugasan dan tidak ada yang mengomentari penggunaannya untuk penggabungan string umum.

Anda mungkin ingin melihat ke dalam penggunaan keluarga sprintf( dokumentasi ) fungsi untuk penggabungan string. Ini memberikan lebih banyak sanitasi dan kegunaan daripada hanya menggabungkan dua string dengan operator penugasan.

$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" */

Saya biasanya menggunakan vsprintf, karena bekerja dengan array lebih mudah untuk mengelola posisi nilai daripada argumen individu.

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

Juga dengan larik nilai, seseorang dapat dengan mudah implodemenetapkan kumpulan nilai untuk penggabungan string sederhana.

 var_dump(implode('', array('bar', 'foo')));
 /* string(6) "barfoo" */
fyrye
sumber
Sayangnya, menurut saya sprintf () tidak secepat concat sederhana. Dan itu pasti juga tidak tampak ramah sintaks. Lihat: stackoverflow.com/q/7147305/2430549
HoldOffHunger
Benar, meskipun tidak yakin bagaimana yang Anda maksud dengan sintaks ramah. Meskipun tidak secepat atau sederhananya seperti penggabungan. sprintfbiasanya digunakan dalam berbagai bahasa. sprintfmemiliki tempat dan tujuan saat menggunakannya. misalnya. casting beberapa nilai atau menerapkan sejumlah input menggunakan sprintf, memberi Anda lebih banyak fungsi daripada penggabungan sederhana saat diperlukan . Lihat: 3v4l.org/8PWil Tapi itu tidak boleh digunakan sebagai pengganti lengkap untuk penggabungan.
fyrye
3

Anda dapat menggabungkan fungsi bawaan substr_replace, di mana argumen $ start dan $ length dapat disetel ke 0, yang menambahkan $ replacement ke $ string dan mengembalikan hasilnya, seperti:

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

Contoh penggunaan fungsi helper adalah:

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

Jika Anda menyukai pemrograman prosedural, itu.

sde-simon.dll
sumber
Saya tidak melihat minat menggunakan substr_replace; melakukan fungsi yang sederhana $string = $prefix.$string;akan melakukan triknya.
Pierre-Olivier Vares
2

Mengubah komentar Blakethepatton menjadi sebuah jawaban (terima kasih), cara untuk melakukannya lebih rapi untuk nama variabel yang lebih panjang adalah dengan menggunakan referensi ke variabel sebagai berikut:

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

Ini akan menghemat pengetikan jawaban dari Eric V. jika nama variabel asli Anda 12 karakter atau lebih.

Alternatif dalam satu baris:

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