Any equivalent to .= for adding to beginning of string in PHP?

Just wondering if there is something like .= for adding text to the beginning of a string, e.g.:

$foo =. 'bar';

which doesn't work.

Edit: example was originally $foo =. $bar; which can be achieved with $bar .= $foo;

71803 次浏览

没有,但你可以

$foo = "bar" . $foo

你总是可以为此创造你自己的功能:

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

$string是你想要预先设置的部分,而 $chunk是你想要预先设置的文本。

您可以说检查是可选的,但是通过在这里使用它,您不必担心会意外地传入空值。

我知道这个问题已经问过/回答过一段时间了,但是提供这个答案是因为它在功能上是等价的,尽管它不是赋值操作符,而且没有人评论它在一般字符串串联中的用法。

您可能需要研究使用 sprintf(文件)函数族进行字符串串联。 It provides a lot more sanitization and usability than just combining two strings with assignment operators.

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

我通常使用 vsprintf,因为使用数组比单个参数更容易管理值位置。

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

另外,对于一个值数组,可以简单地使用 implode作为简单字符串串联的结果值集。

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

您可以包装内置函数 substr_replace,其中参数 $start 和 $length 可以设置为0,它将 $替换前置到 $string 并返回结果,如下所示:

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

An example usage of the helper function would be:

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

如果你喜欢程序编程的话。

Blakethepatton 的评论转换成一个答案(谢谢) ,对于较长的变量名,一种更灵活的方法是使用 参考文献来表示变量,如下所示:

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

如果原始变量名为12个字符或更长,这将节省您在 answer by Eric V上的输入。

另一种说法是:

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