Własna napisana funkcja, która sortuje wyniki wybierając priorytety z wyników bazując na tytule oraz opisie.
Funkcja przyjmuje jako parametry: słowo do wyszukiwania oraz tablicę dwuwymiarową z parametrami: title, intro, id, cat, catid, podcat, podcatid.
Piorytetami dla funkcji są pełne wyrazy zawarte w tytule, potem nie pełne wyrazy w tytułach, później pełne wyrazy w opisie, oraz na końcu nei pełne (wyniki bez znalezionego słowa są ostatnie).
Wykorzystanie funkcji:
$posortowane = sortuj_wyniki($slowo, $wyniki);
Zmienna $posortowane będzie zawierała wyniki.
Średni czas wykonania funkcji to 0.0002 sek.
Listing
/***************************************************************
** Skrypt sortowania wyników by DiviX dla www.Funkcje.net
** Wszelkie prawa autorskie zastrzeżone! 22/08/2009
** ver 1.0
**
** Funkcja przyjmuje jako parametry: słowo do wyszukiwania oraz
** tablicę dwuwymiarową z parametrami: title, intro, id, cat,
** catid, podcat, podcatid.
****************************************************************/
function sortuj_wyniki($szukane_slowo, $wyniki) {
$szukane_slowo = strtolower($szukane_slowo);
$tytuly_pojedyncze = Array();
$tytuly_reszta = Array();
$pojedyncze = Array();
$intra_pojedyncze = Array();
$intra_reszta = Array();
$pojedyncze2 = Array();
$posortowane = Array();
$dodane_id = Array();
$ids = Array();
//obliczanie długości słowa
$dlugosc_slowa = strlen($szukane_slowo);
/******************************************
** sprawdzanie wyników w tytule czy są one pełne w wyrazach
******************************************/
for($i=0; $i<sizeof($wyniki); $i++) {
$tytul = $wyniki[$i][title];
$tytul = strtolower($tytul);
$pozycja_slowa = strpos($tytul, $szukane_slowo);
//słowo jest ostatnim wyrazem w ciągu
if ($tytul[$pozycja_slowa-1] == " " && $tytul[$pozycja_slowa+$dlugosc_slowa] == "") {
if ($tytul[$pozycja_slowa] == $szukane_slowo[0] && $tytul[$pozycja_slowa+$dlugosc_slowa-1] == $szukane_slowo[strlen($szukane_slowo)-1]) {
array_push($tytuly_pojedyncze, $wyniki[$i]);
array_push($dodane_id, $wyniki[$i][id]);
}
}
//słowo jest pierwszymwyrazem w ciągu
else if ($tytul[$pozycja_slowa-1] == "" && $tytul[$pozycja_slowa+$dlugosc_slowa] == " ") {
if ($tytul[$pozycja_slowa] == $szukane_slowo[0] && $tytul[$pozycja_slowa+$dlugosc_slowa-1] == $szukane_slowo[strlen($szukane_slowo)-1]) {
array_push($tytuly_pojedyncze, $wyniki[$i]);
array_push($dodane_id, $wyniki[$i][id]);
}
}
//słowo jest w środku ciagu
else if ($tytul[$pozycja_slowa-1] == " " && $tytul[$pozycja_slowa+$dlugosc_slowa] == " ") {
if ($tytul[$pozycja_slowa] == $szukane_slowo[0] && $tytul[$pozycja_slowa+$dlugosc_slowa-1] == $szukane_slowo[strlen($szukane_slowo)-1]) {
array_push($tytuly_pojedyncze, $wyniki[$i]);
array_push($dodane_id, $wyniki[$i][id]);
}
}
else{
array_push($tytuly_reszta, $wyniki[$i]);
}
}
/******************************************
** sprawdzanie wyników w opisach czy są one pełne w wyrazach
******************************************/
for($i=0; $i<sizeof($wyniki); $i++) {
//for ($j=0; $j<sizeof($wyniki; $j++) {
//if($tytuly_pojedyncze
$dodane = false;
$intro = $wyniki[$i][intro];
$id = $wyniki[$i][id];
$intro = strtolower($intro);
$pozycja_slowa = strpos($intro, $szukane_slowo);
$dlugosc_slowa = strlen($szukane_slowo);
//echo $id."--";
//słowo jest ostatnim wyrazem w ciągu
if ($intro[$pozycja_slowa-1] == " " && $intro[$pozycja_slowa+$dlugosc_slowa] == "") {
if ($intro[$pozycja_slowa] == $szukane_slowo[0] && $intro[$pozycja_slowa+$dlugosc_slowa-1] == $szukane_slowo[strlen($szukane_slowo)-1]) {
for($j=0; $j<sizeof($dodane_id); $j++) {
if($dodane_id[$j] == $id){
$dodane = true;
break;
}
}
if($dodane != true) {
array_push($intra_pojedyncze, $wyniki[$i]);
array_push($dodane_id, $id);
}
}
}
//słowo jest pierwszym wyrazem w ciągu
else if ($intro[$pozycja_slowa-1] == "" && $intro[$pozycja_slowa+$dlugosc_slowa] == " ") {
if ($intro[$pozycja_slowa] == $szukane_slowo[0] && $intro[$pozycja_slowa+$dlugosc_slowa-1] == $szukane_slowo[strlen($szukane_slowo)-1]) {
for($k=0; $k<sizeof($dodane_id); $k++) {
if($dodane_id[$k] == $id){
$dodane = true;
break;
}
}
if($dodane != true) {
array_push($intra_pojedyncze, $wyniki[$i]);
array_push($dodane_id, $id);
}
}
}
//słowo jest w środku ciagu
else if ($intro[$pozycja_slowa-1] == " " && $intro[$pozycja_slowa+$dlugosc_slowa] == " ") {
if ($intro[$pozycja_slowa] == $szukane_slowo[0] && $intro[$pozycja_slowa+$dlugosc_slowa-1] == $szukane_slowo[strlen($szukane_slowo)-1]) {
for($n=0; $n<sizeof($dodane_id); $n++) {
if($dodane_id[$n] == $id){
$dodane = true;
break;
}
}
if($dodane != true) {
array_push($intra_pojedyncze, $wyniki[$i]);
array_push($dodane_id, $id);
}
}
}
for($n=0; $n<sizeof($dodane_id); $n++) {
if($dodane_id[$n] == $id){
$dodane = true;
break;
}
}
if($dodane != true) {
array_push($intra_reszta, $wyniki[$i]);
array_push($ids, $id);
}
}
//łączenie tablic z wynikami w odpowiedniej kolejności
$pojedyncze = array_merge($tytuly_pojedyncze, $intra_pojedyncze);
//$pojedyncze2 = array_merge($tytuly_reszta, $intra_reszta);
$posortowane = array_merge($pojedyncze, $intra_reszta);
//echo sizeof($tytuly_pojedyncze). "++". sizeof($intra_pojedyncze). "++". sizeof($tytuly_reszta). "++". sizeof($intra_reszta);
//print_r($posortowane);
return $posortowane;
}
?>
Ranga: Administrator serwisu Punktów: 0