3v4l.org

run code in 300+ PHP versions simultaneously
<?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; } $query = 'Який розклад маршруток "Бородянка - Макарів"? І яка ціна?'; $queryWords = explode(' ', $query); //var_dump($words); $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); 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']); }

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).

VersionSystem time (s)User time (s)Memory (MiB)
8.2.10.0080.00018.22
8.2.00.0000.00919.29
8.1.140.0080.00017.43
8.1.130.0000.00820.16
8.1.120.0120.00418.81
8.1.110.0160.00018.68
8.1.100.0080.00818.78
8.1.90.0130.00418.84
8.1.80.0100.00618.68
8.1.70.0060.01018.76
8.1.60.0150.00418.89
8.1.50.0120.00618.83
8.1.40.0090.00918.77
8.1.30.0100.00818.86
8.1.20.0150.00319.02
8.1.10.0120.00618.72
8.1.00.0060.01218.73
8.0.260.0070.00718.06
8.0.250.0070.00918.13
8.0.240.0110.00418.16
8.0.230.0000.01418.04
8.0.220.0100.00517.92
8.0.210.0110.00517.94
8.0.200.0140.00318.14
8.0.190.0120.00218.11
8.0.180.0140.00018.04
8.0.170.0100.00518.01
8.0.160.0120.00318.06
8.0.150.0110.00317.98
8.0.140.0080.00818.04
8.0.130.0070.00718.07
8.0.120.0120.00318.07
8.0.110.0080.00818.06
8.0.100.0040.01118.05
8.0.90.0040.01118.02
8.0.80.0150.00018.01
8.0.70.0160.00018.03
8.0.60.0120.00318.12
8.0.50.0110.00418.02
8.0.30.0120.00417.97
8.0.20.0090.00518.13
8.0.10.0110.00418.05
7.4.330.0110.00015.57
7.4.320.0080.00817.71
7.4.300.0070.00517.66
7.4.290.0040.00817.75
7.4.280.0110.00317.65
7.4.270.0110.00417.74
7.4.260.0060.00317.60
7.4.250.0060.00617.72
7.4.240.0090.00617.71
7.4.230.0110.00317.77
7.4.220.0040.01117.64
7.4.210.0000.01517.60
7.4.200.0050.01017.63
7.4.190.0090.00417.83
7.4.180.0050.01018.09
7.4.160.0090.00617.85
7.4.150.0080.00517.60
7.4.140.0090.00617.65
7.4.130.0050.00817.66
7.4.120.0160.00017.74
7.4.110.0080.00617.58
7.4.100.0060.00917.68
7.4.90.0070.00717.65
7.4.80.0040.01117.76
7.4.70.0110.00417.71
7.4.60.0140.00017.54
7.4.50.0100.00517.46
7.4.40.0110.00317.50
7.4.30.0080.00517.58
7.4.20.0110.00417.64
7.4.10.0120.00317.68
7.4.00.0050.00917.58

preferences:
10.84 ms | 403 KiB | 5 Q