Всем доброй ночи Есть текстовый документ .txt в котором с новой строки написаны фразы, и есть html документ, где с новой строки идет код + фразы из списка. Строк в html порядка 1000, возможно ли, спарсить все строки из html, в которых есть совпадения с .txt. Фразы в html и txt используются по 1 разу, т.е не повторяются.
Пример строк .txt:
Пример строк в html
<tr><td></td><td></td><td>Фраза 3</td><td></td></tr>
<tr><td></td><td></td><td>Этой фразы нет</td><td></td></tr>
<tr><td></td><td></td><td>Фраза 1</td><td></td></tr>
Получается что в 3 ячейке встречается фраза, а в остальных - произвольные данные
За ранее спасибо.
Для выполнения данной задачи вам, очевидно, для начала потребуется получить данные из обоих файлов. Сделать это можно с помощью функции file(), которая возвращает массив строк из файла. С помощью флага FILE_IGNORE_NEW_LINES можно исключить символ конца строки \n из элементов массива.
Дальнейший алгоритм можно строить по разному, исходя из потребностей в эффективности. В любом случае у нас будет цикл по строкам html-файла, внутри которого необходимо определить, встречается ли такая строка в текстовом файле. В самом простом случае для этого нам потребуется вложенный цикл для проверки строк. Если необходимо повысить эффективность, то можно сортировать список строк и использовать бинарный поиск.
Разбить исходную html-строку и вытащить из нее содержимое последней ячейки можно, несколькими путями. Наиболее простыми будет использование функции explode(), либо с помощью регулярных выражений. Разделителем для explode() будет </td><td>. В результате чего в последнем 4-м элементе массива получим искомую строку, оканчивающуюся на </td></tr>. Эти символы, в свою очередь, можно либо просто убрать с помощью substr(), либо заменить через str_replace(), либо убрать, используя strip_tags().
Во вложенном цикле сравнения строк, если совпадение найдено, то исходную html-строку добавляем в массив результатов, а найденную исходную текстовую строку удаляем из массива строк, т.к. больше она нам, согласно условию, не встретится.
Исходя из вышенаписанного, код решения задачи имеет следующий вид:
$strings = file("strings.txt", FILE_IGNORE_NEW_LINES);
$html = file("data.txt", FILE_IGNORE_NEW_LINES);
$result = [];
foreach($html as $row){
$value = array_pop(explode("</td><td>", $row, 4));
$value = substr($value, 0, -10); // удалить </td></tr>
foreach($strings as $k => $str){
if($str == $value){
$result[] = $row;
unset($strings[$k]);
break;
}
}
}
print_r($result);
Продвижение своими сайтами как стратегия роста и независимости