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

Filter data out from text file using php

这就是我的基本情况:

$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>

代码并没有到此结束,但我希望到此为止是有意义的。

我需要的是只回显那些具有特定值 $pieces[4] 的行。假设 - 仅回显文本文件中具有 $pieces[4] 值 "food" 的那些行。

有可能吗?我尝试了数组搜索、数组键、过滤数组等……但我从来没有做对。

更新: 佩德罗的回答(中途):

{
$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. 正确输出

  2. 输出已替换(与输出 1 相同)- 需要跳过

  3. 正确输出

  4. 输出已替换(与输出 3 相同)- 需要跳过

  5. 输出已替换(与输出 3 相同)- 需要跳过

  6. 输出已替换(与输出 3 相同)- 需要跳过

  7. 正确输出

因此,它设法过滤掉了我需要的内容,但那些不符合条件的内容只会被最后匹配的行替换。但我需要跳过这些。

唯一缺少的是补充 Pedro 上面的答案,以便行(不符合条件 $pieces[4]="food")2,4,5, 6 被跳过、忽略并且根本没有回显。

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

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

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

<?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 "

这里有一些HTML和PHP不需要任何调整。

";    
}
else {
echo "";
}
}
?>

一开始我加了echo "error";到其他部分,但这只是为了测试。我收到令人不安的错误消息,只需删除它即可消失。目前看来它就像那样工作。

如果我不添加 else 部分,那么我又回到了问题所在,它过滤掉其中具有值 "food" 的行,但这次也只用零值回显其他所有内容。