<?php
<?php
$having_arr = ["волк", "волейболк", "восток"];
if (!function_exists('mb_substr_replace')) {
function mb_substr_replace($original, $replacement, $position, $length)
{
$startString = mb_substr($original, 0, $position, 'UTF-8');
$endString = mb_substr($original, $position + $length, mb_strlen($original), 'UTF-8');
$out = $startString . $replacement . $endString;
return $out;
}
}
function get_min_str_in_arr($arr)
{
$str = $arr["0"];
for ($i = count($arr) - 1; $i > 0; $i--) {
if (mb_strlen($arr[$i]) <= mb_strlen($str)) {
$str = $arr[$i];
};
};
return $str;
};
function get_all_pattern($str, $patterns_arr, $max_str_replaced)
{
if (preg_match_all("/\.\*/iu", $str) == $max_str_replaced) {
return $patterns_arr;
}
for ($i = mb_strlen($str) - 1; $i >= 0; $i--) {
if (mb_substr($str, $i, 1, "UTF-8") == "." || mb_substr($str, $i, 1, "UTF-8") == "*") {
continue;
}
$replaced_str = mb_substr_replace($str, ".*", $i, 1);
array_push($patterns_arr, $replaced_str);
$patterns_arr = get_all_pattern($replaced_str, $patterns_arr, $max_str_replaced);
}
return get_all_pattern($replaced_str, $patterns_arr, $max_str_replaced);
}
function clean_pattern($arr)
{
$arr = array_unique($arr);
//Rename key after deleting doubles
$cleaned_arr = [];
$i = 0;
foreach ($arr as $key => $value) {
$cleaned_arr[$i] = $arr[$key];
$i++;
}
return $cleaned_arr;
}
function find_math($pattern, $str)
{
return preg_match("/$pattern/iu", $str);
};
function is_math_all($maths_arr)
{
$boolean = 1;
for ($i = 0; $i < count($maths_arr); $i++) {
$boolean = $boolean * $maths_arr[$i];
}
return $boolean;
}
function find_the_same($having_arr, $patterns_arr)
{
$almost_end = [];
foreach ($patterns_arr as $pattern) {
$maths_arr_boolean = [];
foreach ($having_arr as $key => $having_str) {
array_push($maths_arr_boolean, find_math($pattern, $having_str));
};
if (is_math_all($maths_arr_boolean)) {
array_push($almost_end, $pattern);
}
}
return $almost_end;
}
function end_this($arr)
{
$end_arr = [];
$nubmer_arr = [];
foreach ($arr as $key => $value) {
$new_value = preg_match_all("/\.\*/iu", $value);
array_push($nubmer_arr, $new_value);
}
$min = min($nubmer_arr);
foreach ($arr as $key => $value) {
if (preg_match_all("/\.\*/iu", $value) == $min) {
array_push($end_arr, $value);
}
}
return $end_arr;
}
$min_str = get_min_str_in_arr($having_arr);
$max_str_replaced = mb_strlen($min_str) - 1;
$patterns_arr = get_all_pattern($min_str, $patterns_arr = [], $max_str_replaced);
array_push($patterns_arr, $min_str);
$patterns_arr = clean_pattern($patterns_arr);
$almost_end_arr = find_the_same($having_arr, $patterns_arr);
var_dump(end_this($almost_end_arr));