|
|
|
| В общем задачка такова. Нужно сделать сонник. Точнее сонники , всего 35 шт. Соответсвенно и 35 файликов XML.
По запросу пользователя, введённого слова производится поиск по файликам вот кусок кода.
function search($key_index, $dream_books, $search_word='')
{
$current_dream_book = array();
$request_results = array();
//загружаем сонники
foreach ($dream_books as $dream_book_name=>$dream_html_name)
{
//создаём объект simple xml
$dream_books_xml = simplexml_load_file(DREAM_BOOKS.$dream_book_name.'.xml');
//определяем выбираем блоки по индексу
$current_dream_book[$dream_book_name] = $dream_books_xml->letter[$key_index];
unset($dream_book_name);
}
//Ищем совпадение введённого пользоваетелем слова со словами в сонниках
foreach ($current_dream_book as $key=>$dream_book)
{
$k=0;
foreach ($dream_book as $search_words)
{//конвертируем слово в кодировку KOI8-R
$current_word = mb_convert_encoding((string)$search_words->head, 'KOI8-R', 'UTF-8');
//условие совпадения введённого слова (так вроде бы быстрее работает)
if (!eregi($search_word, $current_word))
{
continue;
}
else
//if (eregi($search_word, $current_word))
{
$k++;
$request_results[$key][$k]['head'] = mb_convert_encoding((string)$search_words->head, 'KOI8-R','UTF-8');
for ($i=0; $i<count($search_words->block->line); $i++)
{
$request_results[$key][$k]['line'][]= mb_convert_encoding((string)$search_words->block->line[$i], 'KOI8-R','UTF-8');
}
unset($search_words);
}
}
}
//echo "<pre>";
//print_r($request_results);
return $request_results;
}
|
Всё работает, но ... уж очень долго. Максимальное время поиска на локальной машине составляет 11 сек. Страшно подумать что будет если около 100 пользователей сразу запросят что-то.
В общем вопрос таков. Как эту штуку можно ускорить ? | |
|
|