Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka
Forum PHP.pl > Forum > Gotowe rozwiązania
Gonzo
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
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
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
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
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
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
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
Trudno, olaliście mnie sad.gif. 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
Nagadaleś się nagadałeś i sam znalazleś rozwiązanie.... laugh.gif 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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.