Есть ли более быстрый способ, вместо использования функции preg_match в следующем коде?


этот код находит, если есть строка в 2004 и если это так, я повторяю некоторые данные из этого определенного элемента, строки поиска было найдено.

Мне было интересно, если это лучший/самый быстрый подход, потому что моя главная забота-скорость и XML-файл огромный. Спасибо за ваши идеи.

это пример XML-кода

<entry ID="4406">
    <id>4406</id>
    <title>Book Look Back at 2002</title>
    <link>http://www.sebastian-bergmann.de/blog/archives/33_Book_Look_Back_at_2002.html</link>
    <description></description>
    <content_encoded></content_encoded>
    <dc_date>20.1.2003, 07:11</dc_date>
    <date_iso>2003-01-20T07:11</date_iso>
    <blog_link/>
    <blog_title/>
</entry>

это код

<?php
$books  = simplexml_load_file('planet.xml');
$search = '2004';
foreach ($books->entry as $entry) {
    if (preg_match('/' . preg_quote($search) . '/i', $entry->date_iso)) {
        echo $entry->dc_date;
    }
}
?>


1252
2
задан 22 июля 2011 в 03:07 Источник Поделиться
Комментарии
3 ответа

Во-первых, поставить таймер, чтобы вы знали, Если дела пойдут лучше.

Ты повторяешь '/' . preg_quote($поиск) . '/я'для каждой книги. Вы должны создать строку поиска только один раз, иначе вы тратите время:

<?php
$books = simplexml_load_file('planet.xml');
$search = '2004';
$regex = '/' . preg_quote($search) . '/i';
foreach ($books->entry as $entry) {
if (preg_match($regex, $entry->date_iso)) {
echo $entry->dc_date;
}
}
?>

Если вы ищете только 2004 или подобный вы можете анализировать, если проще функции будет быстрее, например strpos.

Также я модификатор может быть лишним.

2
ответ дан 22 июля 2011 в 03:07 Источник Поделиться

Помните, что если вы используете strpos вы должны использовать !== оператор для проверки возникновения вашего сена. Если 2004 находится в позиции 0 к != будут оценивать справедливо.

<?php
$books = simplexml_load_file('planet.xml');
$search = '2004';
foreach ($books->entry as $entry) {
if (strpos($entry->date_iso, $search) !== false) {
echo $entry->dc_date;
}
}
?>

2
ответ дан 23 июля 2011 в 11:07 Источник Поделиться

Это может не совсем быть ответ вы ищете, но я бы предположил, что функция simplexml_load_file несколько дороговата на большой XML-файл, так как он создает много объектов, содержащие сведения об элементах, атрибуты, ценности, содержание и т. д.

По этой причине я хотел бы попробовать найти соответствие элементов с помощью функции preg_match первый (матч всей записи, теги, содержащие 2004 года в соответствующих date_iso теги), то либо нагрузки просто эти матчи с simplexml_load_file , чтобы извлечь нужную информацию, или (даже лучше) использовать функции preg_match , чтобы сделать то же самое.

1
ответ дан 26 июля 2011 в 02:07 Источник Поделиться