Loading:


Własne sortowanie wyników dla tytułów oraz opisów - Order System

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.



Napisz Artyku³

Listing

<?php
        /***************************************************************
        ** 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;
                }

?>




Dodano przez: divix
Ranga: Administrator serwisu Punktów: 38523
Komentarze użytkowników
    • Tre¶æ komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2024 v.1.5 | design: diviXdesign & rainbowcolors