如何优化这段PHP代码,包括SPLIT、ARRAY\u WALK和JOIN?
我的数据库包含以下记录: 1) 第一行用double分隔\n\n,其余行用\n分隔:如何优化这段PHP代码,包括SPLIT、ARRAY\u WALK和JOIN?,php,Php,我的数据库包含以下记录: 1) 第一行用double分隔\n\n,其余行用\n分隔: Introduction Line 1 Line 2 Line 1 Line 2 Line 3 2) 用分隔符分隔的所有内容\n: Introduction Line 1 Line 2 Line 1 Line 2 Line 3 3) 无分隔符: Introduction 我的目标是在用单个分隔符分隔的每一行之前添加“>>”。我做的意大利面晚餐(而且很有效)如下所示: list($intro,
Introduction
Line 1
Line 2
Line 1
Line 2
Line 3
2) 用分隔符分隔的所有内容\n:
Introduction
Line 1
Line 2
Line 1
Line 2
Line 3
3) 无分隔符:
Introduction
我的目标是在用单个分隔符分隔的每一行之前添加“>>”。我做的意大利面晚餐(而且很有效)如下所示:
list($intro, $details) = split("\n\n", $dbInput);
if ($details) {
$temp = split("\n", $details);
array_walk($temp, create_function('&$v,$k', '$v = ">> $v";'));
$dbOutput = "$intro \n\n ".join("\n", $temp);
} else {
$temp = split("\n", $intro);
if (count($temp) > 1) {
array_walk($temp, create_function('&$v,$k', '$v = ">> $v";'));
$dbOutput = join("\n", $temp);
} else $dbOutput = $temp[0];
}
我想要实现的一个例子:
Introduction
>> Line 1
>> Line 2
>> Line 3
或
或
问题:我将如何优化此代码,以将array_walk与split和join结合在同一语句中,并以某种方式按照以下行进行:
$a = join("\n" , array_walk(split("\n", $a), create_function(('&$v,$k', '$v = ">> $v";')) ) );
我个人的方法是使用
preg\u prelace
替换以\n
结尾的行(而不是\n\n
前面的>
)
我猜你不想要这个
Introduction
把>
放在前面
在这种情况下:
$pattern = '/([^\n]+)(?=\n(?!\n))|(?<=(?<!\n)\n)([^\n]+)/';
$replacement = '>>$1$2';
$subject = 'Introduction
Line 1
Line 2
Line 3';
echo preg_replace ($pattern, $replacement, $subject);
/* echoes:
Introduction
>>Line 1
>>Line 2
>>Line 3
*/
$pattern='/([^\n]+)(?=\n(?!\n))|(?$1$2';
$subject='引言
第1行
第2行
第3行';
echo preg_replace($pattern,$replacement,$subject);
/*回声:
介绍
>>第1行
>>第2行
>>第3行
*/
正则表达式的解释:
([^\n]+)(?=\n(?!\n)) # match a line followed by \n but not a \n\n
| # OR
(?<=(?<!\n)\n)([^\n]+) # match a line preceded by \n but not a \n\n
([^\n]+)(?=\n(?!\n))#匹配一行后跟\n但不是\n\n
|#或
(?
第一位捕获Line1
和Line2
,但不捕获Line3
,因为这是以字符串结尾而不是\n
终止的。正则表达式的第二位捕获Line3
它们也都不包括一行字符串,如简介
请添加一个示例,说明您希望输出的方式。谢谢。它可以工作。我如何在同一查询中向简介行添加“!”,或者我应该运行另一个正则表达式(我可以根据您的示例提出语法)。您需要运行另一个正则表达式。类似于将/([^\n]+\n\n)/
替换为!$1
。