如何从文件中删除包含特定字符(#)的行,并使用PHP回显数据

时间:2018-04-24 16:08:22

标签: php arrays

我有一个文本文件,其数据如下所示:

#dacdcadcasvsa
#svsdvsd
#  
#sfcnakjncfkajnc
I want to keep this line
and this one

如何删除包含#的所有行并回显出看起来不像的行:

I want to keep this line
and this one

我所知道的是我必须得到get_file_contents($ filename)。我必须把它放在一个数组中吗?

任何提示和指导都将不胜感激。

4 个答案:

答案 0 :(得分:1)

使用file()foreach()

$lines = file("a.txt");
foreach ( $lines as $line ) {
    if ( $line[0] != '#' ){
        echo $line;
    }
}

只需更新文件名称即可。

答案 1 :(得分:0)

在输出之前,您可以用空字符串替换所有注释行。

<div style="white-space: pre-line;">
    <?= preg_replace('/^#.*\n/m', '', file_get_contents($filename)) ?>
</div>

答案 2 :(得分:0)

你正在思考正确的思路;虽然您需要的PHP方法(函数)实际上是file_get_contents(),而不是get_file_contents()(根据您的问题)。

让我们分解一下:

  • 我们需要一种将数据分成可排序块的方法。如您所述,执行此操作的最佳方法是使用数组。
  • 我们可以这样做,使用哈希符号(#)作为分隔符 - 但是这样 意味着最后一块文本是我们想要的文本混合 删除,我们要保留的文字。相反,我们将使用line 打破了我们的分界符。
  • 数据分离后,我们可以继续删除那些以井号开头的行。

我们的代码看起来像这样:

<?php
    // Get the file contents
    $fileContents = file_get_contents('my_file.txt'); // This could be any file extension

    // Split the file by new lines
    $contentsArr = preg_split('/\r\n|\r|\n/', $fileContents);

    // Function for removing items from an array - https://stackoverflow.com/questions/9993168/remove-item-from-array-if-item-value-contains-searched-string-character?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
    function myFilter($string) {
        return strpos($string, '?') === false;
    }

    // Remove comment items from array
    $newFileContents = array_filter($fileContents, 'myFilter');

    // Concatenate and echo out the result
    echo implode(",\n",$newFileContents);

答案 3 :(得分:0)

替代因为我很无聊:

foreach(preg_grep('/^#/', file($filename), PREG_GREP_INVERT) as $line) {
    echo $line;
}
  • 将文件行读入数组
  • 获取所有行不以^ #字符
  • 开头
  • 循环这些行