Это то, что у меня есть в основном:
$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) - нужно пропустить
правильный выход
(как и выход 3) - нужно пропустить
(как и выход 3) - нужно пропустить
(как и выход 3) - нужно пропустить
правильный выход
Таким образом, ему удается отфильтровать то, что мне нужно, но те, которые не соответствуют критериям, просто заменяются последней совпадающей строкой. Но мне нужны те, которых нужно пропустить.
Единственное, чего не хватает, это дополнить ответ Педро выше, чтобы строки (которые не отвечали критериям $pieces[4]
= "еда") 2,4,5,6, пропускались, игнорировались и вообще не отражались.
Вы можете использовать strpos, чтобы проверить, содержит ли строка слово " 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 "
Некоторые HTML и PHP здесь не нуждаются в каких-либо корректировках.
";
}
else {
echo "";
}
}
?>
Сначала я добавил echo "error"; к другой части, но это было просто для тестирования. У меня появилось тревожное сообщение об ошибке, просто удалив его. На данный момент кажется, что он работает именно так.
Если я не добавлю часть else, я вернусь к проблеме, где он отфильтровывает строки, которые имеют значение "еда" в нем, но также отгоняет все остальное только на этот раз с нулевыми значениями.
$data=str_replace(array('<', '>', '\\', '/', '='), "", $data);
внутриforeach
(измените$data
на$element
), чтобы вы могли отфильтровать vals, также было бы неплохо, если бы вы опубликовали часть содержимого вашего текстового файла