function glob_makeArFromString($str) { $ss = glob_removePunctuations($str); $ar = explode(' ', trim($ss)); return $ar; }
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; }