使用 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 相同)- 需要跳过
正确输出
输出已替换(与输出 3 相同)- 需要跳过
输出已替换(与输出 3 相同)- 需要跳过
输出已替换(与输出 3 相同)- 需要跳过
正确输出
因此,它设法过滤掉了我需要的内容,但那些不符合条件的内容只会被最后匹配的行替换。但我需要跳过这些。
唯一缺少的是补充 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" 的行,但这次也只用零值回显其他所有内容。
这就是我的基本情况:
$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 相同)- 需要跳过
正确输出
输出已替换(与输出 3 相同)- 需要跳过
输出已替换(与输出 3 相同)- 需要跳过
输出已替换(与输出 3 相同)- 需要跳过
正确输出
因此,它设法过滤掉了我需要的内容,但那些不符合条件的内容只会被最后匹配的行替换。但我需要跳过这些。
唯一缺少的是补充 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" 的行,但这次也只用零值回显其他所有内容。