使用php从文本文件中过滤数据

使用php从文本文件中过滤数据,php,text-files,Php,Text Files,这就是我的基本情况: $data = file('../articles.txt'); $data=str_replace(array('<', '>', '\\', '/', '='), "", $data); foreach($data as $element) { $element = trim($element); $pieces = explode("|", $element); echo " <div class=article-box> <

这就是我的基本情况:

$data = file('../articles.txt');

$data=str_replace(array('<', '>', '\\', '/', '='), "", $data);

foreach($data as $element) 

{
$element = trim($element);
$pieces = explode("|", $element);

echo "

<div class=article-box>

<div class=article-image>
<a href=" . $pieces[4] . "/" . $pieces[2] . "/ ><img src=" . $pieces[4] . "/" . $pieces[2] . "/" . $pieces[2] . "-img.png width=250px></a>  
</div>
{
$element = trim($element);
if (strpos($element,'food') !== false) {
$pieces = explode("|", $element);    
}
某种程度上是有效的——它完成了任务,但用过滤掉的输出替换了我想要隐藏的输出

我想要的是跳过不包含给定值的输出。目前,它跳过了不需要的输出,但用空白值替换这些输出,或者只是将过滤后的输出相乘。下面是关于需要回显哪些行以及跳过哪些行的说明

2015-10-05|21:31|name1|name2|food|comment|extra - needs to trigger echo
2015-10-05|21:31|name1|name2|health|comment|extra - needs to skip
2015-10-05|21:31|name1|name2|food|comment|extra - needs to trigger echo
2015-10-05|21:31|name1|name2|finance|comment|extra - needs to skip
2015-10-05|21:31|name1|name2|finance|comment|extra - needs to skip
2015-10-05|21:31|name1|name2|health|comment|extra - needs to skip
2015-10-05|21:31|name1|name2|food|comment|extra - needs to trigger echo
上面的代码现在所做的是:

  • 正确输出

  • 替换输出(与输出1相同)-需要跳过

  • 正确输出

  • 替换输出(与输出3相同)-需要跳过

  • 替换输出(与输出3相同)-需要跳过

  • 替换输出(与输出3相同)-需要跳过

  • 正确输出

  • 所以,它设法过滤掉我需要的东西,但是那些不符合条件的就被最后匹配的行所取代。但我需要跳过这些

    唯一缺少的是补充上述Pedro的答案,以便跳过、忽略和根本不回显行(不符合标准
    $pieces[4]
    =“food”)2,4,5,6。

    您可以使用该行检查是否包含单词
    food

    $element = trim($element);
    if (strpos($element,'food') !== false) {
        $pieces = explode("|", $element);
        //the rest of the code
    }
    
    您可以使用检查该行是否包含单词
    food

    $element = trim($element);
    if (strpos($element,'food') !== false) {
        $pieces = explode("|", $element);
        //the rest of the code
    }
    

    我对佩德罗的回答做了一些调整,我想我得到了我需要的结果。代码是这样的:

    <?php
    $data = file('../articles.txt');
    
    $data=str_replace(array('<', '>', '\\', '/', '='), "", $data);
    foreach($data as $element) 
    {
    $element = trim($element);
    if (strpos($element,'food') !== false) {
    $pieces = explode("|", $element);
    echo "
    
    首先我添加了echo“error”;但这只是为了测试。通过删除,我得到了令人不安的错误消息。目前,它似乎就是这样工作的


    如果我不添加else部分,那么我又回到了问题所在,它过滤掉了其中包含有“食物”价值的行,但也只在这一次以零值重复其他所有内容

    我对佩德罗的答案做了一些调整,我想我得到了我需要的结果。代码是这样的:

    <?php
    $data = file('../articles.txt');
    
    $data=str_replace(array('<', '>', '\\', '/', '='), "", $data);
    foreach($data as $element) 
    {
    $element = trim($element);
    if (strpos($element,'food') !== false) {
    $pieces = explode("|", $element);
    echo "
    
    首先我添加了echo“error”;但这只是为了测试。通过删除,我得到了令人不安的错误消息。目前,它似乎就是这样工作的


    如果我不添加else部分,那么我又回到了问题所在,它过滤掉了其中包含有“食物”价值的行,但也只在这一次以零值重复其他所有内容

    使用
    $data=str\u替换(数组(“,”,“/”,“=”),“,$data)
    内部
    foreach
    (将
    $data
    更改为
    $element
    ),这样您就可以过滤掉VAL。此外,如果您发布一些文本文件内容,这将是一件好事。Spedro的答案是有效的,但它会将结果与文档中的总行数相乘。现在我只需要弄清楚如何停止它内部
    foreach
    (将
    $data
    更改为
    $element
    ),这样您就可以过滤掉VAL。此外,如果您发布一些文本文件内容,这将是一件好事。Spedro的答案是有效的,但它会将结果与文档中的总行数相乘。现在我只需要想办法阻止它。非常感谢!它是有效的,但是。。。它过滤所需的行,然后将其与总行数相乘。假设我有两行代码,其中包含名为“food”的片段。首先,它会重复这两行,然后重复最后一行,就像文档中的行总数一样。佩德罗,你能帮我解决乘法问题吗。我怎样才能将结果限制为只回显一次呢?您能否发布输入文件和所需输出的小样本?如果是,请更新你的问题。我更新了主要问题。谢谢你花时间。到目前为止,这帮了我很大的忙。我不确定我是否在跟踪你……我的答案上没有任何内容被替换,只是经过了过滤。你可能想发布一个真实的例子。非常感谢!它是有效的,但是。。。它过滤所需的行,然后将其与总行数相乘。假设我有两行代码,其中包含名为“food”的片段。首先,它会重复这两行,然后重复最后一行,就像文档中的行总数一样。佩德罗,你能帮我解决乘法问题吗。我怎样才能将结果限制为只回显一次呢?您能否发布输入文件和所需输出的小样本?如果是,请更新你的问题。我更新了主要问题。谢谢你花时间。到目前为止,这帮了我很大的忙。我不确定我是否在跟踪你……我的答案上没有任何内容被替换,只是经过了过滤。你可能想发布一个真实的例子。