Поиск на PHP или подскажите чайнику..

12
IL
На сайте с 20.04.2007
Offline
435
#11
Braindbrigada:

$rw = "<span style=\"color:#FEBB03:\">".$worlds."</span>";
$contents = str_replace ($worlds, $rw, $contents);

в worlds - не массив?.. т.е. если будет поиск с пробелом - есть шанс, что не найдётся...

* массив миров? o_O

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
F
На сайте с 06.02.2012
Offline
124
#12

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

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

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

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

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

IL
На сайте с 20.04.2007
Offline
435
#13
fordzon:
Надо подумать....

А чего думать - завернуть в цикл.

foreach ($words as $word) {

}
F
На сайте с 06.02.2012
Offline
124
#14
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>";

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

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий