如何在PHP中第n次出现字符串到第n次出现?

时间:2016-04-17 09:16:14

标签: php regex string

我试图在PHP中将一个巨大的字符串解析为较小的字符串。我有一个字符串,每个部分以\n结尾。我想在第二\n到第五\n之后得到句子。

我在某种程度上成功了,但由于我正在处理的字符串非常庞大,因此需要花费大量时间。这是我使用的方法:

$arrayBuffer = explode("\n", $buffer);
for($i = 0; $i < $NumOfRequests; $i++) {
    $tmpBuffer = "";
    for($j = $i * $NumOfAllowedRows; $j < ($i + 1) * $NumOfAllowedRows; $j++) {
        // stop the loop if it reached the last cell of arrayBuffer, to avoid Index Out Of Bound Exception
        if($j === $arrayBuffer[count($arrayBuffer)]){
            break;
        }
        $tmpBuffer = $tmpBuffer . $arrayBuffer[$j] . "\n";                  
    }
         // do something with the tmpBuffer                 
}

目的是从第一个$ buffer本身获取一个子字符串,而不创建另一个数组。

1 个答案:

答案 0 :(得分:0)

我找到了一个使用explode和implode的好解决方案,它足够快,以下是代码示例:

$buffer = "aaa\nbbb\nccc\nddd\neee\nfff\nggg\nhhh\niii\n"; // enter file path here
for($i = 0; $i < 5 ; $i++){

$arr = explode("\n", $buffer);
//strlen(implode("\n", array_slice($arr, 0, 6)));
$position = (strlen(implode("\n", array_slice($arr, 0, 3))));

$tmpBuffer = substr($buffer,0,$position);
$buffer = substr($buffer, $position);

error_log("tmpbuffer : ".$tmpBuffer).PHP_EOL;
error_log("buffer : " . $buffer).PHP_EOL;

explode会将字符串分成和平,然后我在字符串中得到字符的第n个出现,然后strlen将获得子字符串的长度,直到第n次出现。