2016-04-17 12 views
0

PHPで大きな文字列を小さな文字列に解析しようとしています。私は各部分の\nで終わる文字列を持っています。 2回目の文章を\nから5番目の\nまで得たいです。文字列をn番目の文字からn番目の文字までPHPでどのように取得するには?

私はある意味でそれを管理しましたが、私が扱っている文字列は膨大なので、時間がかかります。これは私が使用した方法である:

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

目的は別の配列を作成せずに最初の$バッファ自体から部分文字列を取ることです。

+0

ブロブをループするためにジェネレータを使用し、必要なラインのみを生成する必要があります。 forループを使うよりも大きな利点があります。 – Xorifelse

+0

これは良い答えに見えましたが、残念ながら私はPHP V 5.3を使用していますが、アップグレードできません: – MuhammadNe

+0

ジェネレータを使用しないと、ストリームを使って文字列(またはファイル)を1行ずつ読み込むことができます。 –

答えて

0

ここで、私が爆発すると崩壊する使用して良い解決策を発見し、それが十分に高速であるが、コードの例です。

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

は爆発後、私は文字のn番目の出現を取得し、個展に出せるに文字列を分割します文字列strlenは、サブストリングの長さをn番目のオカレンスまで取得します。

関連する問題