Просмотр полной версии : Нужна малюсенькая помощь по готовому скрипту
Есть такой скрипт поиска и вывода кеев из файла .txt
<form action="index.php" method="GET">
<input name="key" type="text" size="60"></input>
<input type="submit" value="OK"></input>
</form>
<?php
if ((isset($_GET["key"]))&&(!empty($_GET["key"]))){
$key = $_GET["key"];
$key_length = strlen($key);
@$file = fopen("keys.txt", "r");
if ($file){
flock($file, LOCK_SH);
flock($file, LOCK_UN);
$i = 0;
while (!feof($file)){
$arr[$i] = fgets($file, 200);
$i++;
}
fclose($file);
$i = 0;
for ($i=0; $i<count($arr); $i++){
$l = 0;
for ($l=0; $l<strlen($arr[$i])-$key_length; $l++){
if ($key == substr($arr[$i],$l,$key_length)){
echo $arr[$i] . "<br>";
}
}
}
}
else{
echo "Not Found";
}
}
?>
но есть несколько вопросов :
1. как сделать чтоб когда вводишь например : красный карандаш он искал не только точно заданую фразу но и с перестановками, например карандаш красный, карандаш он красный.
2. и как сделать чтоб он выводил уже перемешаными искомые кеи.
Огромное спасибо Всем кто откликнется :) .
1.Разбей на 2 слова фразу. Можно игнорировать символы.
if ($key1+$key2 == substr($arr[$i],$l,$key_length) || $key2+$key1 == substr($arr[$i],$l,$key_length))
Как-то так. Вообще php я не очень знаю, было бы на ASP.net ))
Вы конечно извените а куда это вставить ? (краснеющий смайлик)
не поленился бы, код отформатировал. Абсолютно не читаемый.
if ((isset($_GET["key"]))&&(!empty($_GET["key"]))){
$i = 0;
for ($i=0;...
:D
этот код мне посоветовали на этом сайте :), а почему не читаемый ?
<?php
if ((isset($_GET["key"]))&&(!empty($_GET["key"]))){
$key = $_GET["key"];
$key_length = strlen($key);
$keys = explode(' ', $key);
@$file = fopen("keys.txt", "r");
if ($file){
flock($file, LOCK_SH);
flock($file, LOCK_UN);
$i = 0;
while (!feof($file)){
$arr[$i] = fgets($file, 200);
$i++;
}
fclose($file);
$i = 0;
for ($i=0; $i<count($arr); $i++){
$ok = 1;
for($j=0; $J<sizeof($keys); $j++)
if (strpos($arr[$i], $keys[$j]) === FALSE) ok = 0;
if(ok == 1)
echo $arr[$i] . "<br>";
}
}
else{
echo "Not Found";
}
}
?>
если я ничего не напутал, то он ищет каждое слово и если все слова есть в строке, строка выводится
WNZRS
выдает ошибку в этой строке if (strpos($arr[$i], $keys[$j]) === FALSE) ok = 0;
Parse error: syntax error, unexpected '='
не мог бы посмотреть в чем проблема ? буду очень признателен :)
Он забыл знак доллара перед переменной ok
Это полнейший быдлокод. Я нифига не понял, что делает твой скрипт. Опиши подробно задачу скрипта.
У тебя есть файл кеев, в формате:
кей1
кей2
кей3
..
Ты вводишь кей в формочку и нажимаешь ок.
Он должен просто вывести ответ, нашел ли он такую запись в файле?
Спасибо огромное :)
но теперь Fatal error: Maximum execution time of 30 seconds exceeded
но файл с кеями не большей
Solker
у меня файл с разноплановыми кеями я ввожу искомый кей и мне нужно чтобы он вывел все строки где встречаются слово или слова которые я ввел :)
Solker
он работает все выводит но выводит только конкретые кеи если я введу "кей1 красный" то он выдает мне все кеи где встречается только "кей1 красный" а мне нужно чтоб он выдавал еще все строки где встречабтся вводимые кеи
Эм.
<form method="GET">
<input name="key" type="text" size="60"></input>
<input type="submit" value="OK"></input>
</form>
<?php
if ($_GET["key"]){
$key = trim($_GET["key"]);
$file = file("family.txt");
foreach($file as $line) {
if(stristr($line,$key))
{
$line = str_ireplace($key,'<font color="red">'.$key.'</font>',$line);
echo $line.'<br/>'.chr(10);
}
}
}
?>
Но в строке Superlogin
По поиску perl
Он найдет эту строчку.
Это надо?
Или я не понял.
Solker
да ты понял правильно скрипт что ты дал делает тоже что и мой но твой гораздо понятнее и меньше. но он всеравно ищет заданую фразу, а нужно чтоб искал и выводил строки в которых встречаются 2 введеных в форму слова в разных местах строки. например в файле находится
карта памяти
красная карта памяти
черная карта памяти
карта не памяти
памяти карта
процессор
индия
куртка
я в форму ввожу : карта памяти
он выдаст :
карта памяти
красная карта памяти
черная карта памяти
а нужно чтоб выдал :
карта памяти
красная карта памяти
черная карта памяти
карта не памяти
памяти карта
вродебы понятно написал :)
а тебе спасибо большее !!!
тоесть исходя из прошлого примера моего скрипт мне не выдает
карта не памяти
памяти карта
потому что слова эти есть но они стоят не в той последовательности в которй я ввел в форму
<?php
if ((isset($_GET["key"]))&&(!empty($_GET["key"])))
{
$key = $_GET["key"];
$fkeys = file('keys.txt');
$keys = explode(' ', $key);
$found = '';
for($i=0; $i<sizeof($fkeys); $i++)
{
$ok = 1;
for($j=0; $j<sizeof($keys); $j++)
{
if(stripos($fkeys[$i], $keys[$j]) === false)
$ok = 0;
}
if($ok == 1)
{
$found .= $fkeys[$i].'<br>';
}
}
if(strlen($found) > 1)
{
echo $found;
}
else
echo 'Not found';
}
?>
СПАСИБООООООО !!!!!!!!!!!
а еще я бы покопал в сторону регулярных выражений. очень интересная штука, которая позволяет красиво решать всякие такие задачи.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot