我有一个TXT文件(example.txt),其中包括以下内容:
text1
text2
text3
@
new text1
new text2
new text3
PHP代码:
<?php
$open = fopen('example.txt','r');
while (!feof($open)) {
$getTextLine = trim(fgets($open));
if ( $getTextLine == '@' ) {
echo fgets($open). "<br />";
}
}
?>
如何在@字符后读取TXT文件的所有行并保存数组?我想输出的是
new text1
new text2
new text3
答案 0 :(得分:1)
使用PHP的示例代码:
<?php
$input=file_get_contents("example.txt");
$lines=explode("\n",$input);
$status=false;
foreach($lines as $line)
{
if($status === false && $line === "@")
{
$status=true;
}
else if($status === true)
{
echo("-->");
echo($line);
echo("\n");
}
}
?>
OR
<?php
$lines = file("example.txt",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$status=false;
foreach ($lines as $line)
{
if($status === false && $line === "@")
{
$status=true;
}
else if($status === true)
{
echo("-->");
echo($line);
echo("\n");
}
}
?>
example.txt文件:
text1
text2
text3
@
new text1
new text2
new text3
输出:
-->new text1
-->new text2
-->new text3
-->
-->
新更新:
<?php
$file = file("example.txt",FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$status=false;
$list=array();
foreach ($file as $line)
{
if($status === false && $line === "@")
{
$status=true;
}
else if($status === true)
{
echo("-->");
echo($line);
echo("\n");
$list[]=$line;
}
}
print_r($list);
?>
数组的输出:
Array
(
[0] => new text1
[1] => new text2
[2] => new text3
)
答案 1 :(得分:1)
您可以尝试以下方法:
<?php
// Read file.
$filename = 'example.txt';
$file = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// Read lines
$output = array();
$found = false;
foreach ($file as $row) {
if ($row == '@') {
$found = true;
continue;
}
if ($found) {
$output[] = $row;
}
}
// Output
print_r($output);
?>
答案 2 :(得分:1)
一个不错的简短答案是只读取整个文件,然后从PHP_EOL.'@'.PHP_EOL
中提取一段文本,以确保它自己在一行上找到@
。然后从开始处修剪PHP_EOL
和@
。最后拆分为数组,使用余数爆炸...
$text = file_get_contents("a.txt");
$end = ltrim(strstr($text, PHP_EOL."@".PHP_EOL ), PHP_EOL."@");
$out = explode(PHP_EOL, $end);
print_r($out);
如果您的文件带有...
text1
text2
text3
@
new text1
new text2
new text3
--
aaa
您可以再次使用strstr()
从@
中选择内容,然后在--
行之前...
$text = file_get_contents("a.txt");
$end = ltrim(strstr($text, PHP_EOL."@".PHP_EOL ), PHP_EOL."@");
$end = strstr($end, PHP_EOL."--".PHP_EOL, true);
$out = explode(PHP_EOL, $end);
print_r($out);
将输出
Array
(
[0] => new text1
[1] => new text2
[2] => new text3
)
答案 3 :(得分:0)
如何使用file()
将文件读入内存(警告:如果这是一个很大的文件,效率可能不高),然后删除这些行,直到到达包含@
的行为止
$lines = file('example.txt', FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES);
foreach ($lines as $i => $line) {
if (stripos($line, '@') === false) {
unset($lines[$i]);
} else {
break;
}
}