此代码有什么问题:
我需要从标记之间的行中制作一个数组: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' ) !== false
和strpos ( $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);