示例#1
0
function glob_makeArFromString($str)
{
    $ss = glob_removePunctuations($str);
    $ar = explode(' ', trim($ss));
    return $ar;
}
示例#2
0
 private function relevantSort($ar, $search)
 {
     $s_search = glob_removePunctuations($search);
     $ar_search = glob_makeArFromString($s_search);
     $cnt_s = count($ar_search);
     $count_find = 0;
     $ar1 = array();
     $ar2 = array();
     $res_ar = array();
     while ($rows = $ar->fetch()) {
         $koef = 1;
         $s = $rows['name'];
         //  $s = 'Проверялочка: Математика 3 класс';
         //   $s = 'Математика. 5 класс. Методическое пособие к учебнику Г.К. Муравина, О.В. Муравиной "Математика. 5 класс". В 2-х частях. Часть 1. Вертикаль';
         $tmp_name = glob_removePunctuations($s);
         $tmp_ar = glob_makeArFromString($tmp_name);
         $cnt = count($tmp_ar);
         if ($s_search == $tmp_name) {
             $koef = 1000;
         } else {
             if (preg_match("/(^|\\s){$s_search}(\\s|\$)/i", $tmp_name)) {
                 if (strpos($tmp_name, $s_search) == 0) {
                     $koef = 500 + 1 / $cnt;
                 } else {
                     $koef = 200 + 1 / $cnt;
                 }
             } else {
                 $ar_repeat = array();
                 $schet = 0;
                 foreach ($ar_search as $val2) {
                     if ($c = preg_match_all("/(^|\\s){$val2}(\\s|\$)/i", $tmp_name, $matches)) {
                         if (isset($ar_repeat[$val2])) {
                             $cnt_schet = $ar_repeat[$val2]['cnt'];
                             if ($cnt_schet < $c) {
                                 $schet++;
                             }
                         } else {
                             $ar_repeat[$val2] = array('cnt' => 1);
                             $schet++;
                         }
                     }
                 }
                 $koef = $schet + 1 / $cnt;
                 //      echo strlen($s_search)."<br>";
                 //      echo $tmp_name."<br>";
             }
         }
         //     echo $koef; exit;
         $count_find = count($ar1);
         if ($count_find < SEARCH_PROD_NUM) {
             $ar1[$rows['id']] = $koef;
             $ar2[$rows['id']] = $rows;
         } else {
             arsort($ar1, SORT_NUMERIC);
             end($ar1);
             $cur = each($ar1);
             if ($koef > $cur['value']) {
                 unset($ar2[$cur['key']]);
                 array_pop($ar1);
                 //удаляем последние элементы
                 $ar1[$rows['id']] = $koef;
                 $ar2[$rows['id']] = $rows;
             }
         }
         $ar1[$rows['id']] = $koef;
         $ar2[$rows['id']] = $rows;
     }
     arsort($ar1, SORT_NUMERIC);
     $num = 0;
     foreach ($ar1 as $key => $val) {
         $num++;
         $res_ar[] = $ar2[$key];
     }
     return $res_ar;
 }