Gonzo
11.10.2003, 10:54:30
Szukam gotowego skryptu wyszukiwarki. Mam taką tablicę:
nazwa polska||nazwa oryginalna||nazwa pliku||liczba płyt
Chciałbym wyszukać tytuł filmu. Chodzi mi o 1. lub 2. kolumnę (nie obie razem). Proszę o pomoc doświadczonych programistów.
Gligamesh
11.10.2003, 12:36:02
to ci powinno pomoc
[php:1:8e125d1e4b]<?php
$plik_tablica="engine/dane/tablica.txt";
$tablica=@file($plik_tablica);
foreach ( $tablica as $k => $v ){
if (strpos($v, $szukaj) !== false){
$t = explode('|', $v);
$z[] = $t[0] . " i " . $t[3] . "n";
}
}
echo ("Znalezione:<br />");
echo ( implode( "<br />", $z ) );
echo ( "<hr>" );
?>[/php:1:8e125d1e4b]
Gonzo
11.10.2003, 14:10:44
No dobra, ale jak mam tego użyć? Chciałbym mieć wyszukiwarkę podobną do tej na napisy.biz. Tzn. chciałbym, żeby po wpisaniu jakiegoś wyrazu i wybraniu odpowiedniej kolumny (pierwsza lub druga), rozpoczęło się wyszukiwanie. Z tym, że chciałbym, aby był taki bajerek: jeżeli ktoś wpisze jakiś tekst i liczbę, liczba musi bezwzględnie znajdować się w wynikach.
Jako wynik chciałbym otrzymać tablicę podobną do źródłowej.
Gligamesh
11.10.2003, 15:01:16
nom to jest niewiecej taka wyszukiwarka
Małe objasnienie:
$szukaj - szykany wyraz,mozesz go ukryc w urlu np. index.php?szukaj=szukany text
$z[] = //tu sa generowane wyniki wyszukiwania// $t[0] to jest kolumna z ktorej ma byc wyswietlany wynik numerujesz sobie tak jak potrezbujesz np. t[1], t[7] itd. mozesz tam sobie wklepic tabele.
Skrypt przeszukuje cała baze. tzn. wszystkie kolumny
Gonzo
15.10.2003, 10:26:23
W ostatnim poście opisałem, jak powinna wyglądać moja wyszukiwarka. Dlatego ta, którą mi opisałeś, niestety się nie nadaje.
W ostateczności może być bez tego bajeru z cyframi, ale jest niezbędne kierowanie wyszukiwania do określonej kolumny.
Gonzo
25.10.2003, 12:32:43
Heh... Czekałem na jakąś reakcję i pomoc... Ale cóż, może teraz się sprawdzicie...
Zrobiłem na początku taki skrypt:
[php:1:f353466a96]<?
for ($i=0; $i<sizeof($tablica); $i++)
{
$tym = strtolower($tablica[$i][$wg]);
for ($in=0; $in<=strlen($tablica[$i][$wg]) - strlen($szuk); $in++)
{
if (substr($tym, $in, strlen($szuk)) == $szuk)
$zn[] = $tablica[$i];
}
}
?>[/php:1:f353466a96]
ale uznałem, że raczej się nie nadaje. Chciałem spróbować napisać skrypt, który sprawdzałby po kolei każde wpisane słowo.
[php:1:f353466a96]<?
$szuk = strtolower($szuk);
$trans = array('Ą' => 'ą', 'Ć' => 'ć', 'Ę' => 'ę', 'Ł' => 'ł', 'Ń' => 'ń', 'Ó' => 'ó', 'Ś' => 'ś', 'Ż' => 'ż', 'Ź' => 'ź');
$szuk = strtr($szuk, $trans);
echo "$szuk <br><br>";
$szuk = explode(' ', $szuk);
for($liczba_slow=1; !isset($zn); $liczba_slow++)
{
$jest = 0;
for($i=0; $i<sizeof($tablica); $i++)
{
$tym = strtolower($tablica[$i][$wg]);
$tym = strtr($tym, $trans);
$tym = explode(' ', $tym);
// Wybranie kolejnego slowa
for ($ii=0; $ii<sizeof($szuk); $ii++)
{
// Sprawdzanie, czy aktualne slowo wystepuje w stringu
for($iii=0; $iii<sizeof($tym); $iii++)
{
if ($szuk[$ii] == $tym[$iii])
$jest++;
}
}
if($jest == $liczba_slow)
$zn[] = $tablica[$i];
}
}
?>[/php:1:f353466a96]
Ale niestety coś pokręciłem... Bardzo proszę o pomoc...
Gonzo
26.10.2003, 08:49:52
Oto kod mojego skryptu:
[php:1:8b73e66e20]<?
$szuk = strtolower($szuk);
$trans = array('Ą' => 'ą', 'Ć' => 'ć', 'Ę' => 'ę', 'Ł' => 'ł', 'Ń' => 'ń', 'Ó' => 'ó', 'Ś' => 'ś', 'Ż' => 'ż', 'Ź' => 'ź');
$szuk = strtr($szuk, $trans);
$szuk = explode(' ', $szuk);
for ($liczba_slow=sizeof($szuk); !isset($zn) && $liczba_slow>0; $liczba_slow--)
{
// Wybieramy nastepny wiersz
for ($i=0; $i<sizeof($tablica); $i++)
{
$jest = 0;
$tym = strtolower($tablica[$i][$wg]);
// Wybieramy nastepne slowo
for ($slowo=0; $slowo<sizeof($szuk); $slowo++)
{
// Sprawdzenie, czy slowo znajduje sie w aktualnym elemencie
for ($in=0; $in<=strlen($tablica[$i][$wg]) - strlen($szuk[$slowo]); $in++)
{
if (substr($tym, $in, strlen($szuk[$slowo])) == $szuk[$slowo])
$jest++;
}
}
if ($jest == $liczba_slow) $zn[] = $tablica[$i];
}
}
?>[/php:1:8b73e66e20]
W tej chwili działa on już bardzo dobrze. Ma w sobie jednak błąd. Mianowicie wyszukując któreś słowo ($szuk), robi to dwa razy. Niby mało ważne, ale na przykład wpisując "Człowiek ze" chcemy odnaleźć "Człowiek ze złotym pistoletem", a wyskakuje nam również "Oszukać przeznaczenie", bo ma w sobie dwa razy 'ze'.
Ludzie, pomóżcie :!:
Gonzo
26.10.2003, 13:01:48
Trudno, olaliście mnie

. Ale gdy przyjrzałem się skryptowi, zauważyłem, że wyszukuje on tego samego słowa niezależnie od tego, czy już jest znalezione...
intol
27.10.2003, 15:07:59
Nagadaleś się nagadałeś i sam znalazleś rozwiązanie....

Jak ja wielu znam takich ludzi.... :wink:
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.