Добрый вечер, есть код который выводит самую длинную часть в двух словах, в данном случае "ааа". Подскажите пожалуйста, как можно сделать, чтобы в случае нескольких таких частей они все выводились. Конкретно здесь "ааа" и "оо"
$array = array(
'Argoolaaa',
'Banaaanoo' );
function longestCommonPart($words) {
$words = array_map('strtolower', array_map('trim', $words));
$sort_by_strlen = create_function('$a, $b', 'if (strlen($a) == strlen($b))
{ return strcmp($a, $b); } return (strlen($a) < strlen($b)) ? -1 : 1;');
usort($words, $sort_by_strlen);
$longestCommonPart = array();
$shortest_string = str_split(array_shift($words));
while (sizeof($shortest_string)) {
array_unshift($longestCommonPart, '');
foreach ($shortest_string as $ci => $char) {
foreach ($words as $wi => $word) {
if (!strstr($word, $longestCommonPart[0] . $char)) {
break 2;
}
}
$longestCommonPart[0] .= $char;
}
array_shift($shortest_string);
}
usort($longestCommonPart, $sort_by_strlen);
return array_pop($longestCommonPart); }
echo longestCommonPart($array);
В этом примере будут найдены повторяющиеся буквы, расположенные рядом друг с другом, начиная от двух и более совпадений, и при условии, что эти совпадения есть более чем в одном слове
$text = 'Добрый ввеер, еесть код котооорый вывооодит...';
$words = explode(' ', $text);
var_dump( check_matches($words) );
function check_matches($words) {
$array = [];
$result = [];
foreach ($words as $word) {
preg_match_all('~(\pL)\1+~u', $word, $arr);
!$arr[0] ?: $array[] = $arr[0];
}
do {
$first_array = array_shift($array);
foreach ($array as $arr) {
$temp = array_intersect($first_array, $arr);
!$temp ?: $result[] = join($temp);
}
} while (count($array));
return $result;
}
Результат:
array (size=3)
0 => string 'ее' (length=4)
1 => string 'ооо' (length=6)
Демо
Доброе время суток. Честно лень было вникать в код, но через регулярные выражения решается достаточно просто. Если я правильно понял
$array = array(
'Argoolaaa',
'Banaaanoo'
);
$pattern = "#(.)\\1{1,}#m";
foreach ($array as $el) {
$mattches = [];
preg_match_all($pattern, $el, $mattches);
foreach ($mattches[0] as $f) {
echo $f . PHP_EOL;
}
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
Не совсем понимаю, как работает перегруженный оператор [] в следующем коде: