@ 2022-11-24T19:01:02Z <?php
function translitUa($str) {
$array = [
//'&'=>'ta',
//'%'=>'',
//'\''=>'',
'Зг'=>'Zgh',
'зг'=>'zgh',
'А'=>'A','а'=>'a',
'Б'=>'B','б'=>'b',
'В'=>'V','в'=>'v',
'Г'=>'H','г'=>'h',
'Ґ'=>'G','ґ'=>'g',
'Д'=>'D','д'=>'d',
'Е'=>'E','е'=>'e',
'Є'=>'Ye','є'=>'ie',
'Ж'=>'Zh','ж'=>'zh',
'З'=>'Z','з'=>'z',
'И'=>'Y','и'=>'y',
'І'=>'I','і'=>'i',
'Ї'=>'Yi','ї'=>'i',
'Й'=>'Y','й'=>'i',
'К'=>'K','к'=>'k',
'Л'=>'L','л'=>'l',
'М'=>'M','м'=>'m',
'Н'=>'N','н'=>'n',
'О'=>'O','о'=>'o',
'П'=>'P','п'=>'p',
'Р'=>'R','р'=>'r',
'С'=>'S','с'=>'s',
'Т'=>'T','т'=>'t',
'У'=>'U','у'=>'u',
'Ф'=>'F','ф'=>'f',
'Х'=>'Kh','х'=>'kh',
'Ц'=>'Ts','ц'=>'ts',
'Ч'=>'Ch','ч'=>'ch',
'Ш'=>'Sh','ш'=>'sh',
'Щ'=>'Shch','щ'=>'shch',
'Ь'=>'','ь'=>'',
'Ю'=>'Yu','ю'=>'iu',
'Я'=>'Ya','я'=>'ia'
];
return strtr($str,$array);
}
function wordcombos($words) {
if ( count($words) <= 1 ) {
$result = $words;
} else {
$result = array();
for ( $i = 0; $i < count($words); ++$i ) {
$firstword = $words[$i];
$remainingwords = array();
for ( $j = 0; $j < count($words); ++$j ) {
if ( $i <> $j ) $remainingwords[] = $words[$j];
}
$combos = wordcombos($remainingwords);
for ( $j = 0; $j < count($combos); ++$j ) {
$result[] = $firstword . ' ' . $combos[$j];
}
}
}
return $result;
}
function wordsArray($words, $data, $array = []) {
if ($words === []) {
return $array;
}
$word = array_shift($words);
$subArray = wordsArray($words, $data, $array);
if ($subArray === []) {
$array[metaphone(translitUa($word))]['@data'] = $data;
} else {
$array[metaphone(translitUa($word))] = $subArray;
}
return $array;
}
$matches = [
'розклад маршруток київ' => 'ось розклад маршруток київ',
'розклад автобусів київ' => 'ось розклад маршруток київ',
'розклад маршруток клавдієво' => 'ось розклад маршруток клавдієво',
'розклад автобусів клавдієво' => 'ось розклад маршруток клавдієво',
'розклад маршруток макарів' => 'ось розклад маршруток макарів',
'розклад автобусів макарів' => 'ось розклад маршруток макарів',
'розклад макарів' => 'ось розклад маршруток макарів',
'розклад електричок київ' => 'ось розклад електричок київ',
'розклад електричок' => 'ось розклад електричок київ',
'розклад електричок святошин' => 'ось розклад електричок київ',
];
function generateArray($matches) {
$array = [];
foreach ($matches as $keywords => $match) {
$keywordsArray = explode(' ', $keywords);
$combinations = wordcombos($keywordsArray);
foreach ($combinations as $combination) {
$words = explode(' ', $combination);
$array = array_merge_recursive($array, wordsArray($words, $match));
}
}
return $array;
}
$array = generateArray($matches);
function search($query, $array) {
$query = str_replace([',', '.', ';', '-', '!', '?', "\r\n", "\n"], ' ', $query);
$queryWords = explode(' ', $query);
foreach ($queryWords as $word) {
$wordMeta = metaphone(translitUa($word));
foreach ($array as $key => $value) {
if (levenshtein($wordMeta, $key) < 2) {
$array = $array[$key];
//var_dump($word . ' - ' . $wordMeta, $array);
break;
}
}
}
if (isset($array['@data'])) {
var_dump($array['@data']);
}
}
search('Ну
Це хоч по ділу.. а не 200 повідомлень дайте розклад електричок чи маршрутки', $array);
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).
Version System time (s) User time (s) Memory (MiB) 8.2.1 0.000 0.009 18.14 8.2.0 0.004 0.004 19.27 8.1.14 0.000 0.008 17.52 8.1.13 0.004 0.004 20.11 8.1.12 0.009 0.009 18.65 8.1.11 0.014 0.005 18.77 8.1.10 0.010 0.007 18.88 8.1.9 0.009 0.009 18.69 8.1.8 0.013 0.004 18.80 8.1.7 0.014 0.003 18.77 8.1.6 0.016 0.003 18.91 8.1.5 0.015 0.004 18.84 8.1.4 0.016 0.004 18.91 8.1.3 0.020 0.000 18.92 8.1.2 0.017 0.003 18.90 8.1.1 0.016 0.005 18.85 8.1.0 0.006 0.003 18.70 8.0.26 0.015 0.000 18.03 8.0.25 0.007 0.007 18.18 8.0.24 0.012 0.003 18.21 8.0.23 0.007 0.007 18.12 8.0.22 0.009 0.007 18.11 8.0.21 0.013 0.003 18.03 8.0.20 0.012 0.002 18.20 8.0.19 0.010 0.005 18.18 8.0.18 0.006 0.009 18.19 8.0.17 0.012 0.003 18.02 8.0.16 0.009 0.006 18.07 8.0.15 0.012 0.002 17.91 8.0.14 0.005 0.010 18.03 8.0.13 0.010 0.005 18.05 8.0.12 0.014 0.002 18.05 8.0.11 0.012 0.003 17.98 8.0.10 0.016 0.000 18.10 8.0.9 0.000 0.017 18.05 8.0.8 0.008 0.008 17.96 8.0.7 0.015 0.000 17.98 8.0.6 0.005 0.010 18.06 8.0.5 0.012 0.003 17.98 8.0.3 0.006 0.009 18.08 8.0.2 0.005 0.009 18.05 8.0.1 0.012 0.003 18.23 7.4.33 0.011 0.003 15.57 7.4.32 0.014 0.002 17.71 7.4.30 0.004 0.012 17.69 7.4.29 0.010 0.005 17.65 7.4.28 0.014 0.004 17.78 7.4.27 0.012 0.004 17.57 7.4.26 0.006 0.013 17.64 7.4.25 0.006 0.010 17.68 7.4.24 0.014 0.002 17.73 7.4.23 0.015 0.000 17.70 7.4.22 0.010 0.005 17.67 7.4.21 0.004 0.009 17.55 7.4.20 0.010 0.003 17.60 7.4.19 0.010 0.005 17.81 7.4.18 0.008 0.004 17.97 7.4.16 0.006 0.003 17.66 7.4.15 0.002 0.007 17.77 7.4.14 0.006 0.006 17.55 7.4.13 0.004 0.004 17.54 7.4.12 0.000 0.013 17.50 7.4.11 0.007 0.004 17.77 7.4.10 0.013 0.000 17.78 7.4.9 0.007 0.007 17.54 7.4.8 0.011 0.004 17.71 7.4.7 0.000 0.015 17.66 7.4.6 0.000 0.013 17.54 7.4.5 0.000 0.013 17.53 7.4.4 0.010 0.005 17.48 7.4.3 0.011 0.004 17.65 7.4.2 0.011 0.003 17.60 7.4.1 0.008 0.006 17.67 7.4.0 0.005 0.009 17.53
preferences:dark mode live preview
11.35 ms | 403 KiB | 5 Q