Задать вопрос
swipeshot
@swipeshot
Учусь на ошибках.

Как обрезать слово до первой гласной?

Помогите с реализацией. Как сделать так, чтобы слово обрезалось до первой гласной, а потом в начало слова добавить букву? (Например, Д)
Как это реализовать на PHP?
  • Вопрос задан
  • 269 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@djay
Очень просто:

1. Обьявляешь набор гласных букв в массиве
2. Пробегаешься по массиву и смотришь есть ли гласная буква в искомом слове
3. Если есть - приписываешь ту букву, которую хочешь добавить

Как пример:

echo get_word('Хуй', 'Д'); // Дуй
echo get_word('Предложка', 'Д'); // Дедложка
echo get_word('Приветос', 'Д'); // Диветос


function get_word($word, $prepend){
    $dictionary = ['а', 'о', 'э', 'и', 'у', 'ы', 'е', 'ё', 'ю', 'я'];
    $sequences = [];
    $charset = 'UTF-8';

    foreach ($dictionary as $needle) {
        $pos = mb_strpos($word, $needle, 0, $charset);
        if ($pos !== false) {
            $sequences[] = mb_substr($word, $pos, $charset);
        }
    }

    return $prepend. array_reduce($sequences, function($a, $b) use ($charset){
        return mb_strlen($a, $charset) > mb_strlen($b, $charset) ? $a : $b; 
    });
}


Если хочешь сделать для несколько слов, то тогда можно добавить отдельную функцию, которая будет основана на предыдущей. Вот так:

function get_many_words($sentence, $prepend){
    $words = explode(',', $sentence);
    
    $result = [];
    
    foreach ($words as $word) {
        $result[] = get_word($word, $prepend);
    }
    
    return implode(',', $result);
}

echo get_many_words('Привет, мир', 'Д'); // Дивет,Дир
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@motcart
Составляете массив из гласных букв, потом ищете регуляркой вхождение любого элемента массива в заданной строке.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы