是否有等同于。=的方法,用于在PHP中添加到字符串的开头?


103

只是想知道是否存在类似。=的内容,用于将文本添加到字符串的开头,例如:

$foo =. 'bar';

这不起作用。

编辑:示例原本$foo =. $bar;可以用$bar .= $foo;


我担保詹姆斯(James),尽管他应该为此写一个答案...
Christian

6
附加$foo$bar,而不是添加$bar$foo。结果是相似的,但我认为他想变异$foo
埃里克五世

它的意思是有点开玩笑的评论(这就是为什么它是评论,而不是答案)!
2011年

1
嗯...抱歉,不好的例子...现在已修复:)
yuttadhammo

Answers:



4

您可以始终为此做自己的功能:

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

$string将是$chunk您想要添加的文字,并且是您想要在其上方添加文字的文本。

您可以说检查是可选的,但通过在其中进行检查,您不必担心会意外地传入null值。


1
谢谢,虽然你是对的。它绝对不像内置的东西那么容易或快速。如果可以帮助复制和粘贴,请随意复制和粘贴:D
Aaron

7
如果还存在某些问题,则无需!empty再次isset检查。此外,由于它$chunk是函数的必需参数,因此需要将其传递给函数,否则PHP会抱怨。这意味着该检查可以缩写为if ($chunk)(以查看是否为虚假的 “空”)。但是,如果$chunk不包含任何内容,则什么也不会发生。因此,整个功能体可以缩写为return $string . $chunk。这意味着整个功能是完全不必要的。
deceze

1
您可以设置一个变量,但也可以为空。例如,值为“”的变量为空,但也已设置。
亚伦

1
是的,但是我是说您的函数是一种非常冗长的编写方式$foo . $bar。我向您提出挑战,以发现您的功能有任何不同之处,这是重要的情况。:)
deceze

3

我知道这是在不久前被问到/回答的,但是提供了这个答案,因为它在功能上是等效的,尽管它不是赋值运算符,也没有人评论它在一般字符串连接中的用法。

您可能希望研究sprintfdocumentation)函数家族用于字符串连接的用途。与仅将两个字符串与赋值运算符组合在一起,它提供了更多的清理和可用性。

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

不幸的是,我认为sprintf()不如简单的concat那样快。当然,它似乎也不是语法友好的。请参阅:stackoverflow.com/q/7147305/2430549
HoldOffHunger

正确,尽管不确定语法友好的含义。虽然它不如串联快或简单。sprintf通常在多种语言中使用。sprintf有关何时使用它的位置和目的。例如。多个值的铸造或强制执行许多使用输入sprintf,提供了比简单的级联更多的功能时所需的。请参阅:3v4l.org/8PWil,但不应将其用作串联的完整替代品。
fyrye

3

您可以包装内置函数substr_replace,其中$ start和$ length参数可以设置为0,这会将$ replacement附加到$ string并返回结果,如下所示:

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

helper函数的示例用法是:

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

如果您要进行过程编程,那就是。


我看不到使用substr_replace的兴趣;$string = $prefix.$string;在函数中做一个简单的就可以了。
皮埃尔·奥利维尔·瓦雷斯

2

Blakethepatton的注释变成答案(谢谢),对于较长的变量名,更巧妙地做到这一点的方法是使用对变量的引用,如下所示:

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

如果您的原始变量名称为12个字符或更长,这将使您免于键入Eric V答案

在一行上的替代方法:

$f = 'bar' . ($f = &$foo);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.