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: 0
    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-2025 v.1.5 | design: diviXdesign & rainbowcolors