PDA

Просмотр полной версии : Нужна малюсенькая помощь по готовому скрипту


newold
24.01.2010, 20:02
Есть такой скрипт поиска и вывода кеев из файла .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. и как сделать чтоб он выводил уже перемешаными искомые кеи.

Огромное спасибо Всем кто откликнется :) .

Alv
24.01.2010, 20:10
1.Разбей на 2 слова фразу. Можно игнорировать символы.
if ($key1+$key2 == substr($arr[$i],$l,$key_length) || $key2+$key1 == substr($arr[$i],$l,$key_length))
Как-то так. Вообще php я не очень знаю, было бы на ASP.net ))

newold
24.01.2010, 20:14
Вы конечно извените а куда это вставить ? (краснеющий смайлик)

Solker
24.01.2010, 20:18
не поленился бы, код отформатировал. Абсолютно не читаемый.

if ((isset($_GET["key"]))&&(!empty($_GET["key"]))){

$i = 0;
for ($i=0;...

:D

newold
24.01.2010, 20:19
этот код мне посоветовали на этом сайте :), а почему не читаемый ?

WNZRS
24.01.2010, 20:23
<?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";
}
}
?>
если я ничего не напутал, то он ищет каждое слово и если все слова есть в строке, строка выводится

newold
24.01.2010, 20:33
WNZRS

выдает ошибку в этой строке if (strpos($arr[$i], $keys[$j]) === FALSE) ok = 0;

Parse error: syntax error, unexpected '='

не мог бы посмотреть в чем проблема ? буду очень признателен :)

Solker
24.01.2010, 20:35
Он забыл знак доллара перед переменной ok

Это полнейший быдлокод. Я нифига не понял, что делает твой скрипт. Опиши подробно задачу скрипта.
У тебя есть файл кеев, в формате:
кей1
кей2
кей3
..
Ты вводишь кей в формочку и нажимаешь ок.
Он должен просто вывести ответ, нашел ли он такую запись в файле?

newold
24.01.2010, 20:40
Спасибо огромное :)

но теперь Fatal error: Maximum execution time of 30 seconds exceeded

но файл с кеями не большей

newold
24.01.2010, 20:43
Solker

у меня файл с разноплановыми кеями я ввожу искомый кей и мне нужно чтобы он вывел все строки где встречаются слово или слова которые я ввел :)

newold
24.01.2010, 20:46
Solker

он работает все выводит но выводит только конкретые кеи если я введу "кей1 красный" то он выдает мне все кеи где встречается только "кей1 красный" а мне нужно чтоб он выдавал еще все строки где встречабтся вводимые кеи

Solker
24.01.2010, 21:02
Эм.


<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
Он найдет эту строчку.
Это надо?

Или я не понял.

newold
24.01.2010, 21:16
Solker

да ты понял правильно скрипт что ты дал делает тоже что и мой но твой гораздо понятнее и меньше. но он всеравно ищет заданую фразу, а нужно чтоб искал и выводил строки в которых встречаются 2 введеных в форму слова в разных местах строки. например в файле находится

карта памяти
красная карта памяти
черная карта памяти
карта не памяти
памяти карта
процессор
индия
куртка

я в форму ввожу : карта памяти

он выдаст :

карта памяти
красная карта памяти
черная карта памяти

а нужно чтоб выдал :

карта памяти
красная карта памяти
черная карта памяти
карта не памяти
памяти карта

вродебы понятно написал :)

а тебе спасибо большее !!!

newold
24.01.2010, 21:21
тоесть исходя из прошлого примера моего скрипт мне не выдает

карта не памяти
памяти карта

потому что слова эти есть но они стоят не в той последовательности в которй я ввел в форму

WNZRS
24.01.2010, 21:27
<?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';
}
?>

newold
24.01.2010, 21:29
СПАСИБООООООО !!!!!!!!!!!

deedoc
28.01.2010, 15:17
а еще я бы покопал в сторону регулярных выражений. очень интересная штука, которая позволяет красиво решать всякие такие задачи.