fordzon

Рейтинг
138
Регистрация
06.02.2012
ivan-lev:
worlds - не массив?

Да, именно так.

Думаю вот, как правильно расскрасить каждый элемент...

---------- Добавлено 03.05.2013 в 10:14 ----------

ivan-lev, ага... понял.

Щас сделаю. Спасибо!!

---------- Добавлено 03.05.2013 в 10:21 ----------

Там ведь цикл уже есть, обрабатыватся слова по очереди проверяются сравниваются с помощью stristr()..

Наверное можно и раскрасить в том же цикле?

---------- Добавлено 03.05.2013 в 10:32 ----------

Смысл понятен..

Пока с временем напряг разбираться с циклами.. извиняюсь

Но сделаю точно, уже догадался как...

На всякий случай выложу упрощённый, но рабочй вариант скрипта... в надежде на халявное готовое решение

<?php 
if (isset($_POST['txtsear'])=="") {return;}
$words = $_POST['txtsear'];

// Устанока счётчика
$ttt=microtime(); $ttt=((double)strstr($ttt, ' ')+(double)substr($ttt,0,strpos($ttt,' ')));

$indexfile="indexfile.txt"; # файл с индексом
// обрабатываем запрос
$total=0;
$qu2=str_replace ("+","&",$words);

// обрубаем лишние пробелы
// $qu2=chop($qu2);
// $qu2=ltrim($qu2);
$qu2=trim($qu2);

echo ('Запрос: <b>'.$qu2).'</b><br><br>';

// убираем заглавные буквы /
$qu2=mb_strtolower ($qu2);

// разбиваем запрос на слова
$words = explode (' ', $qu2);

// проверяем длинну запроса
if (strlen($qu2)>2):

// открываем индекс
$index=file ($indexfile);
$num= (count($index)-1);

// для каждой сточки из индекса (одна строчка=один файл) выполняем:
$nnn=1;
for ($i=1; $i<$num+2; $i++):

$contents=$index[$i-1];

//Определяем имя файла:-------------------------
$ur = $index[$i-1];
$ur=strstr($ur, '||');
$ur = str_replace( '||','', $ur);
if ($ur !="") {$nn=$i; }

$ur = $index[$nn-1];
$ur=strstr($ur, '||');
$ur = str_replace( '||','', $ur);

//определяем тайтл страницы--------------
$titl = $index[$i-1];
$titl = strstr($titl, '###');
$titl = str_replace( '###','', $titl);

if ($titl != "" ) { $nnn=$i;}
$titl = $index[$nnn-1];
$titl = strstr($titl, '###');
$titl = str_replace( '###','', $titl);

//---------------------------------------------
$wordcount =0;
$mustfound=1;

// выполняем для каждого их запрошенных слов:
$mustntfound=1;

for ($q=0; $q<count($words); $q++):

// обработка знаков *, + и -

// знак *
if (stristr($words[$q], "*")) {$search=str_replace ("*","",$words[$q]); } else { $search=$words[$q];}

// если в слове есть звездочка, то убираем звездочку и добавляем в начало и конец слова по пробелу
// если нет проблелов, то слово будет искаться не целиком, а "вообще",
// то есть на запрос "чай" будет выводиться и слово "случайный".

// bug: скрипт не учитывает, где в слове стоит звездочка и считает, что в любом случае она стоит в конце (!!)

// знак & (или +)
if (stristr($search, "&")) {$search=str_replace ("&","",$search); $mustfound++; }

// если стоит знак +, то количество слов, которые _должны_ быть найдены, увеличиваются на 1

// знак -
if (stristr($search, "-")) {$search=str_replace ("-","",$search); $mustntfound=0; }

// если стоит знак +, то если слово найдено, весь результат умножается на 0 (смотри дальше).

// если слово найдено, считаем его и умножаем на $mustntfound, то есть на 1,
// если найдено "правильное" слово и на 0, если найдено слово, помеченное знаком -

if (stristr($contents, $search)) { $wordcount++; $wordcount=$wordcount*$mustntfound;}

//$rw = "<span style=\"color:#FE0000:\">".$words[$q]."</span>";
$rw = "<span style=\"color:#FF0000;\">$words[$q]</span>";
$contents = str_replace ($words[$q], $rw, $contents);

endfor;

// проверяем, все ли слова, помеченные знаком + найдены,
// либо (если таких слов нет), найдено ли вообще хоть одно слово

if ($wordcount >= $mustfound):





// находим в котором это найдено
//$file=explode ("\n",$contents);
//$file=$file[0];

// выводим результаты
echo 'Найдено в файле : <b>'.$ur.'</b> на странице: ';
echo ("<a target='_blank' href=../".$ur.">".$titl."</a><br>");
//$file=str_replace (".txt", "", $file);
//$file=str_replace ("_", ".", $file);
echo ("<b>...".$contents. "...</b><br><br>");


// считаем, сколько надено
$total++;
endif;

// переходим к следующемуу файлу

endfor;

// выводим результаты
if ($total!=0) {echo ('Всего найдено совпадений: '.$total.'<br>');
// считаем, как долго работал скрипт
$ddd=microtime();
$ddd=((double)strstr($ddd, ' ')+(double)substr($ddd,0,strpos($ddd,' ')));
echo ("Время поиска: ".(number_format(($ddd-$ttt),3))." секунд<br><br>");
}
else echo
("<b>Ничего не найдено!</b><br><br>");

else:
echo ("<br>Слишком короткий запрос!<br><br>");

endif;
?>


---------- Добавлено 03.05.2013 в 10:37 ----------

Блин... квадратные скобки исказились....***91 ***93

---------- Добавлено 03.05.2013 в 12:03 ----------

Всё нормально. Сделал.

Всем спасибо!!!

Кстати, вот этот вариант не раскрашивает.

$rw = "<span style=\"color:#FEBB03:\">".$worlds."</span>"; 

Пробовал в XAMP 1.7.7 и на хосте sprinthostu.ru

Нормально раскрашивает вариант от Милованов Ю.С

$rw = "<span style=\"color:#FEBB03;\">$worlds</span>";

Добавил в скрипт...

Понял. Спасибо!!

Есть маленькая неувязочка.

ключевые слова оказывается тоже массивом идут в цикле.

т.е $worlds - массив.

Надо подумать....

Щас испытаю....

Похоже начинаю понимать...

Сначала изменяем цвет $worlds, как уже подсказали... Но обзовём его $worlds2

Потом подменяем цвет типа так..

$contents = str_replace ($worlds2, $worlds, $contents);

или как?

Технически как правильно..?

Braindbrigada:
А как $contents формируется?

При индексации в текстовом файле образуются строчки по тегам br, p, h.., hr итд..

При поиске строчка контента страницы - один элемент массива и есть $contents.

Скрипт поиска дать?

:)Нет.

Результаты поиска выводятся примерно так:

// выводим результаты

echo ("<a target='_blank' href=../".$url.">".$title."</a><br>");

echo ("..." .$contents. "...");

Надо разорвать текст строчки $contents с помощью какой-нибудь функции и подменить в нём $worlds на раскрашенный.

ssochi.com:
А гугл... пусть че хочет-то и делает, я для людей это все делаю. Адекватная ПС должна нормально к этому относится.

Вот это правильная логика. Поддерживаю.

Кстати, у меня нет в шапке логотипа. Теперь будет. Потом вместо ёлки.

Всем спасибо!

Эсминец:
В Вас говорит паранойя...

Возможно. Не оправдываюсь.

padonakk:
подключайте логику. неужели кто-то ставил бы, если бы вредило?

Логика железная.

А как в теории?

Изменение вроде незначительное. Но ведь... Были картинки и нет картинок.

Возможно косяк Яндекса. Копию он не сохранил.

Наверное надо удалить её из индекса через форму в вебмастере.

Всего: 382