Bir dizenin başına metin eklemek için. = Gibi bir şey olup olmadığını merak ediyorum, örneğin:
$foo =. 'bar';
hangi çalışmıyor.
Düzenleme: örnek, orijinal $foo =. $bar;olarak elde edilebilecek$bar .= $foo;
Bir dizenin başına metin eklemek için. = Gibi bir şey olup olmadığını merak ediyorum, örneğin:
$foo =. 'bar';
hangi çalışmıyor.
Düzenleme: örnek, orijinal $foo =. $bar;olarak elde edilebilecek$bar .= $foo;
$fookadar $baryerine prepending arasında $barhiç $foo. Sonuç benzer ama bence mutasyona uğramak istiyor $foo.
Yanıtlar:
Bunun için her zaman kendi işlevinizi yapabilirsiniz:
function prepend($string, $chunk) {
if(!empty($chunk) && isset($chunk)) {
return $string.$chunk;
}
else {
return $string;
}
}
$stringbaşına eklemek istediğiniz parça ve başına bir $chunkşey eklenmesini istediğiniz metin olacaktır.
Kontrollerin isteğe bağlı olduğunu söyleyebilirsiniz, ancak bunu orada bulundurarak, yanlışlıkla boş bir değer geçirme konusunda endişelenmenize gerek yoktur.
!emptyde her zaman ise isset, bu çifte kontrole gerek yoktur. Ayrıca, $chunkişlevin gerekli bir parametresi olduğundan, işleve aktarılması gerekir , aksi takdirde PHP şikayet eder. Bu, bu kontrolün kısaltılabileceği anlamına gelir if ($chunk)( yanlış mı, yani "boş" mu olduğunu görmek için). Ancak, $chunkhiçbir şey içermiyorsa, hiçbir şey olmayacak. Böylece tüm bu işlev gövdesi kısaltılabilir return $string . $chunk. Bu, tüm bu işlevin oldukça gereksiz olduğu anlamına gelir.
$foo . $bar. İşlevinizin farklı bir şey yapıp yapmadığı önemli bir durumu bulmanız için size meydan okuyorum. :)
Bunun bir süre önce sorulduğunu / yanıtlandığını biliyorum, ancak bir atama operatörü olmamasına ve hiç kimse genel dize birleştirme kullanımı hakkında yorum yapmamasına rağmen işlevsel olarak eşdeğer olduğu için bu yanıtı sağlamak.
Dize birleştirme için sprintf( dokümantasyon ) işlev ailesinin kullanımına bakmak isteyebilirsiniz . İki diziyi atama operatörleriyle birleştirmekten çok daha fazla temizlik ve kullanılabilirlik sağlar.
$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" */
Normalde kullanırım vsprintf, çünkü dizilerle çalışmak, değer konumlarını yönetmek bağımsız bağımsız değişkenlere göre daha kolaydır.
$vprepend = vsprintf('%2$s%1$s', array('foo', 'bar'));
var_dump($vprepend);
/* string(6) "barfoo" */
Ayrıca, bir değerler dizisi ile, implodebasit dize birleştirme için basitçe sonuçtaki değerler kümesi elde edilebilir .
var_dump(implode('', array('bar', 'foo')));
/* string(6) "barfoo" */
sprintfyaygın olarak birden çok dilde kullanılır. sprintfne zaman kullanılacağı konusunda yeri ve amacı vardır. Örneğin. birden çok değerin dökümü veya kullanarak bir dizi girişi zorlamak sprintf, gerektiğinde size basit birleştirmeden daha fazla işlevsellik sağlar . Bakınız: 3v4l.org/8PWil Ancak, birleştirme için tam bir yedek olarak kullanılmamalıdır.
substr_replace$ Start ve $ length argümanlarının 0 olarak ayarlanabildiği, $ değiştirmenin başına $ dizge ekleyen ve sonucu şu şekilde döndüren yerleşik işlevi kaydırabilirsiniz :
function prepend(& $string, $prefix) {
$string = substr_replace($string, $prefix, 0, 0);
}
Yardımcı işlevin örnek bir kullanımı şöyle olacaktır:
$email_message = "Jonathan";
$appropriate_greeting = "Dear ";
prepend($email_message, $appropriate_greeting);
echo $email_message;
Prosedürel programlamayla ilgileniyorsanız, yani.
$string = $prefix.$string;işlevde basit bir şey yapmak hile yapacak.
Torna Blakethepatton yorumuna bir cevap (teşekkür ederim) içine, bir yol daha uzun değişken adları için daha düzgünce bunu yapmak için kullanmaktır referansı aşağıdaki gibi değişkene:
$f = &$foo; $f = "bar{$f}";
Bu, orijinal değişken adınız 12 karakter veya daha uzunsa, Eric V'nin cevabının üzerine yazmanızı sağlar .
Tek satırda bir alternatif:
$f = 'bar' . ($f = &$foo);