繁体   English   中英

如何优化包含SPLIT,ARRAY_WALK和JOIN的PHP代码?

[英]How to optimize this PHP code that includes SPLIT, ARRAY_WALK and JOIN?

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

1)第一行用double \\ n \\ n分隔,其余用\\ n分隔:

Introduction 

Line 1
Line 2

2)用\\ n分隔的所有内容:

Line 1
Line 2
Line 3

3)没有任何划界:

Introduction 

我的目标是在用单个\\ n分隔的每一行之前添加“>>”。 我煮熟的意大利面条晚餐(它有效)看起来如下:

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

要么

>> Line 1
>> Line 2
>> Line 3

要么

Introduction

问题:如何优化此代码以将array_walk与split组合在一起并以相应的方式连接到以下行:

$a = join("\n" , array_walk(split("\n", $a), create_function(('&$v,$k', '$v = ">> $v";')) ) );

我个人的方法是使用preg_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
*/

正则表达式的解释:

([^\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

第一位捕获Line1Line2 ,但不Line3 ,因为它以字符串结尾而不是\\n 正则表达式的第二位捕获Line3

它们也排除了像“ Introduction这样的单行字符串。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM