如何优化这段PHP代码,包括SPLIT、ARRAY\u WALK和JOIN?

如何优化这段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,

我的数据库包含以下记录:

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, $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