Вы можете использовать XPath для прямого поиска в XML ... Что-то вроде:
$dom = new DomDocument();
$dom->loadXml($feedXml);
$xpath = new DomXpath($dom);
$query = '//item[contains(title, "foo")] | //item[contains(description, "foo")]';
$matchingNodes = $xpath->query($query);
Тогда $matchingNodes
будет DomNodeList
всех соответствующих item
узлов. Затем вы можете сохранить их в базе данных ...
Итак, чтобы приспособить это к вашему примеру с реальным миром, вы можете либо создать запрос, чтобы выполнить весь поиск за один раз:
$query = array();
foreach($keywords as $keyword) {
$query[] = '//item[contains(title, "'.$keyword.'")]';
$query[] = '//item[contains(description, "'.$keyword.'")]';
}
$query = implode('|', $query);
Или просто повторно запросить для каждого ключевого слова ... Лично я бы построил один гигантский запрос, так как тогда все сопоставления выполняются в скомпилированном C-коде (и, следовательно, должны быть более эффективными, чем циклическое выполнение в php-ленте и агрегирование результатов нет) ...