从两个标记之间的行生成数组


Make array from lines between two tokens

此代码有什么问题:
我需要从标记之间的行中制作一个数组:START是开始标记,END是结束标记
我有这种类型的文本文件:

 123-456-6541 (P) 
 you got page one
 second line
 third line
 END
 123-456-6541 (P) 
 you got page one
 second line
 another line 
 END

这是php代码;它应该一直在数组中插入行,直到到达第二个令牌:

        <?php
        $fh = fopen('text2.txt','r');
        while ($line = fgets($fh)) {    $lines[] = $line; }
        $active = false;
        $temp = "";
        $result = array();
            for ($i = 0; $i < count ($lines); $i++ )
            {
                     $line = $lines[$i];
                       if  ( strpos ( $line , ' 123-456-6541 (P)' ) !== false )
                                 {  
                                            $result[]= $line;
                                            $active = true;
                                 }      
                            if (strpos($line, 'END') !== false ) {
                                                      $active = false;
                                } 
            if ($active)
                $result[] = $line; 
            }   
                    print_r ( $result );

以下是所需结果:

        Array
(
[0] => you got page one
       second line
       third line
[1] => you got page one 
       second line
       another line
 )

编辑:由于源数据示例更改而重写

$t = <<< EOF
 123-456-6541 (P)
 you got page one
 second line
 third line
 END
 123-456-6541 (P)
 you got page one
 second line
 aanother line
 END
EOF;
preg_match_all( "/[0-9]{3}-[0-9]{3}-[0-9]{4}[ ]+'(P')(.*)END/msU", $t, $r );
print_r( $r );  

这将匹配电话号码模式,并吐出以下内容:

Array
(
    [0] => Array
        (
            [0] => 123-456-6541 (P)
 you got page one
 second line
 third line
 END
            [1] => 123-456-6541 (P)
 you got page one
 second line
 aanother line
 END
        )
    [1] => Array
        (
            [0] => 
 you got page one
 second line
 third line
            [1] => 
 you got page one
 second line
 aanother line
        )
)

strpos ( $line , 'TOK1' ) !== falsestrpos ( $line , 'TOK' ) !== false对于TOK1都为true。在您将其设置为true之后,您立即将active设置为false。(此信息不再有效,因为问题已被编辑)

有了这些新信息,你应该能够制定一个解决方案。。。

编辑

如果我要做的话,它会是这样的。当然,这并没有考虑到很多事情,但这只是一个开始,我不知道你的最终目标是什么:

我再次编辑了代码以匹配您的新文件布局。。。

$lines = file('text2.txt');
$result = array();
$i      = 0;
foreach($lines as $line){
    if(strpos($line, 'END') !== false){
        $i++;
    } else {
        $result[$i][] = $line;
    }
}
print_r($result);