PHP长字符串不带换行符

6
我有一个PHP中的长字符串,它不包含换行符('\n')。
我的编码规范不允许行超过100个字符。
有没有一种方法可以将我的长字符串拆分成多行,而不使用较低效的“.”运算符 - 我不需要连接2个字符串,因为它们可以作为单个字符串给出。
谢谢!
Y
4个回答

3

这很容易:

$str  = 'long text long text long text long text long text';
$str .= 'long text';

1
你可以从字符串中去掉换行符:
  $myStr = "
    here is my string
    and it is spread across multiple lines
  ";
  $myStr = str_replace("\n", "", $myStr);  

对于这种情况,您仍应使用连接运算符(.)。如果您正在使用操作码缓存(APC),则性能惩罚可以忽略不计,并且在将DB访问和其他逻辑(包括循环)考虑到运行时方程式时,这确实不会引起任何注意。

更新:

请阅读下面的页面。上面的结论在文本中并不容易找到,但仔细检查应该表明它是有效的。

http://blog.golemon.com/2006/06/how-long-is-piece-of-string.html


操作码缓存如何影响字符串连接的速度? - Tom Haigh
解析器将把没有动态元素的字符串视为一个长字符串,省略连接运算符。我之前深入研究过这个主题。一旦我再次找到相关文章,我会更新这个答案。 - Lior Cohen
这让我感到困惑:" 这是我的字符串 它跨越了多行 "。看起来不像是有意义的结果。 - Your Common Sense

0
这是正确的代码,解决了所有问题:
$myStr = "
    here is my string
    and it is spread across multiple lines
  ";
  $myStr = str_replace(array("\r","\n"), "", $myStr);  

基于Lior Cohen的答案,但它还将回车符"\r"删除。

这让我有点困惑," 这是我的字符串 它跨越了多行 "。看起来不像是一个合理的结果。 - Your Common Sense

-1

使用heredoc语法(或nowdoc,根据您的需求,查看文档链接):

$multiline = <<<EOT
My name is "$name". I am printing some $foo->foo.
This should print a capital 'A': \x41
EOT;
$singleline = str_replace("\n","",$multiline);

但这很糟糕...抱歉 :-)


5
heredoc的问题在于它将包含字符串中的换行符,这些换行符需要被剥离掉,才能获得问题所指定的“不包含换行符的字符串”。 - Amber
是的,然而这样做也会有性能损失,就像使用连接操作一样。 - Amber
但我认为速度会变慢...需要进行测量。 - Vinko Vrsalovic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接