$pa=Array(); // массив из путей к файлам (страницам) $ca=Array(); // массив названий страниц для формирования списка
$pa[1]="page1.php";
$ca[1]="Страница 1";
$pa[2]="page2.php";
$ca[2]="Страница 2";
$pa[3]="page3.php";
$ca[3]="Страница 3";
$count_pages_for_search=3; // кол-во страниц для поиска
setlocale(LC_ALL
, 'ru_RU.CP1251'); // чтобы strtoupper работал для кириллицы
$word=$_POST['word']; // переданное из формы слово для поиска
$word=strtoupper($word); // слово для поиска в верхний регистр
$captions=Array(); // массив названий страниц где слово найдено
$count_pages=0; // счет страниц где слово найдено
// цикл поиска
for($l=1; $l<=$count_pages_for_search; $l++){
$file = fopen ($pa[$l],"r"); // открываем страницу для чтения $text=fread($file,filesize($pa[$l])); // записываем содержимое в переменную
$text="<span>".$text."</span>"; // это чтобы в начале были всегда теги
$m=explode('<',$text); // разбиваем содержимое страницы
// еще раз разбиваем чтобы получился двумерный массив
// здесь пока все в куче и слова и теги
for ($i=0; isset($m[$i]); $i++){ }
$count=0; \\ счет для запоминания что содержится в переменной слова или тег
$countT=0; \\ счет для массива тегов
$countW=0; \\ счет для массива слов
for ($i=0; isset($m2[$i]); $i++){
for ($j=0; isset($m2[$i][$j]); $j++){
// т.к. в начале всегда теги первое значение массива - тег
if ($j==0){$tag[$countT]=$m2[$i][$j];$countT++; $what[$count]="t";}
// второе значение по любому - слова
if ($j==1){$words[$countW]=$m2[$i][$j];$countW++; $what[$count]="w";}
// а это если вдруг в тексте есть знак больше добавляем к предыдущим словам
if ($j>1){$words[$countW-1]=$words[$countW-1]."##".$m2[$i][$j];$count--;}
$count++;
}
}
// массив what хранит по сути последовательность из тегов и слов чтобы сложить
// содержимое в исходном виде
// поиск среди массива слов(текста) нужного слова
// реализовано не очень красиво согласен
// выделяем слово поиска красным фоном и шрифт желтым цветом и жирным
for ($i=0; isset($words[$i]); $i++){ $words[$i]=preg_replace('/'.$word.'/i','<span style="background-color:#ff1c1c;color:#ffefcf;font-weight:bold;">'.$word.'</span>',$words[$i]); }
// собераем теги и текст к исходной структуре благодаря массиву what
$countT=0;
$countW=0;
$html="";
for ($i=0; isset($what[$i]); $i++){ if ($what[$i]=="t") {$html=$html."<".$tag[$countT].">";$countT++;}
if ($what[$i]=="w") {$html=$html.$words[$countW]; $countW++;}
}
// убираем косяки, они получаются в самом начале содержимого
// восстанавливаем знаки больше если вдруг были в тексте
// считаем количество найденных слов на одной странице (очень тупой способ)
$q=explode('<span style="background-color:#ff1c1c;color:#ffefcf;font-weight:bold;">',$html); $count=0;
for ($i=1; isset($q[$i]); $i++){ $count++; // счетчик количества найденных слов
}
// здесь формируем элемент div с содержимым страницы если на ней найдено слово
// поиска, первый элемент видим, остальные нет
$h="";
if ($count>0){$count_pages++;
$h="<div id='search".$count_pages."' style='width:100%;";
if ($count_pages>1){$h.="display:none;";}
$h.="'>";
$h.="<b><span style='color:#e33030'>".$caption."</span></b> <b><br><span style='color:#a4a4a4'>Найдено совпадений на странице:</span></b> ".$count."<br>";
$h.=$html;
$h.="</div>";
$pagetext[$count_pages]=$h;
$captions[$count_pages]=$ca[$l];
}
} // завершение цикла поиска в очередном файле
// формируем список найденных страниц
// на список повешена функция JS скрывающая текущую страницу и показывающая выбранную из списка
echo "<b><span style='color:#e33030'>Найдено страниц:</span></b> ".$count_pages;
echo "<select id='searchedPages' onchange='thisSearchPage()' style='margin-left:50px; width:150px;'>";
for($m=1; isset($pagetext[$m]); $m++){ echo "<option value='".$m."'>".$captions[$m]."</option>";
}
echo "</select><br><br>";
// сами страницы первая видима остальные нет
for($m=1; isset($pagetext[$m]); $m++){ echo $pagetext[$m];
}