Отфильтровать данные из текстового файла с помощью PHP

1

Это то, что у меня есть в основном:

$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] значение "еда".

Возможно ли это как-то? Я попробовал поиск массива, ключи массива, фильтрованный массив и т.д., Но я так и не понял.

ОБНОВЛЕНИЕ: ответ Педро (на полпути):

{
$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. правильный выход

Таким образом, ему удается отфильтровать то, что мне нужно, но те, которые не соответствуют критериям, просто заменяются последней совпадающей строкой. Но мне нужны те, которых нужно пропустить.

Единственное, чего не хватает, это дополнить ответ Педро выше, чтобы строки (которые не отвечали критериям $pieces[4]= "еда") 2,4,5,6, пропускались, игнорировались и вообще не отражались.

  • 0
    use $data=str_replace(array('<', '>', '\\', '/', '='), "", $data); внутри foreach (измените $data на $element ), чтобы вы могли отфильтровать vals, также было бы неплохо, если бы вы опубликовали часть содержимого вашего текстового файла
  • 0
    Ответ Педро работает, но затем он умножает результат на общее количество строк в документе. Теперь мне просто нужно выяснить, как это остановить.
Теги:
text-files

2 ответа

0
Лучший ответ

Вы можете использовать strpos, чтобы проверить, содержит ли строка слово " food

$element = trim($element);
if (strpos($element,'food') !== false) {
    $pieces = explode("|", $element);
    //the rest of the code
}
  • 0
    Спасибо! Это работает, но ... он фильтрует нужные строки, а затем умножает его на общее количество строк. Допустим, у меня есть 2 строки, которые содержат кусочки под названием «еда». Сначала он повторяет эти 2 строки, а затем повторяет последнюю строку столько раз, сколько в документе содержится общее количество строк.
  • 0
    Педро, не могли бы вы помочь мне решить проблему с множителем. Как я могу ограничить результат эхом только один раз?
Показать ещё 6 комментариев
0

Я сделал некоторую корректировку для ответа Педро, и я думаю, что получил результат, в котором я нуждался. Код выглядит так:

<?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, я вернусь к проблеме, где он отфильтровывает строки, которые имеют значение "еда" в нем, но также отгоняет все остальное только на этот раз с нулевыми значениями.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню