Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Нужна малюсенькая помощь по готовому скрипту (https://forum.antichat.xyz/showthread.php?t=173380)

newold 24.01.2010 20:02

Нужна малюсенькая помощь по готовому скрипту
 
Есть такой скрипт поиска и вывода кеев из файла .txt

PHP код:

<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($fileLOCK_SH);
flock($fileLOCK_UN);
$i 0;
while (!
feof($file)){
$arr[$i] = fgets($file200);
$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 код:

<?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($fileLOCK_SH);
flock($fileLOCK_UN);
$i 0;
while (!
feof($file)){
$arr[$i] = fgets($file200);
$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]) === FALSEok 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

Эм.

PHP код:

<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 код:

<?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

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


Время: 11:14