Search code examples
phpdetectmultibyte

How to detect and echo the last vowel in a word?


$word = "Acrobat" (or Apple, Tea etc.)

How can I detect and echo the last vowel of a given word with php? I tried preg_match function, google'd for hours but couldn't find a proper solution.

There can be multibyte letters like ü, ö in the string.


Solution

  • Here's a multibyte safe version of catching the last vowel in a string.

    $arr = array(
        'Apple','Tea','Strng','queue',
        'asartä','nő','ağır','NOËL','gør','æsc'
    );
    
    /*  these are the ones I found in character viewer
        in Mac so these vowels can be extended. don't
        forget to add both lower and upper case versions
        of new ones because personally I wouldn't rely
        on the i (case insensitive) flag in the pattern
        for multibyte characters.
    */
    $vowels =
        'aàáâãāăȧäảåǎȁąạḁẚầấẫẩằắẵẳǡǟǻậặæǽǣ' .
        'AÀÁÂÃĀĂȦÄẢÅǍȀȂĄẠḀẦẤẪẨẰẮẴẲǠǞǺẬẶÆǼǢ' .
        'EÈÉÊẼĒĔĖËẺĚȄȆẸȨĘḘḚỀẾỄỂḔḖỆḜ' .
        'eèéêẽēĕėëẻěȅȇẹȩęḙḛềếễểḕḗệḝ' .
        'IÌÍÎĨĪĬİÏỈǏỊĮȈȊḬḮ' .
        'iìíîĩīĭıïỉǐịįȉȋḭḯ' .
        'OÒÓÔÕŌŎȮÖỎŐǑȌȎƠǪỌØỒỐỖỔȰȪȬṌṐṒỜỚỠỞỢǬỘǾŒ' .
        'oòóôõōŏȯöỏőǒȍȏơǫọøồốỗổȱȫȭṍṏṑṓờớỡởợǭộǿœ' .
        'UÙÚÛŨŪŬÜỦŮŰǓȔȖƯỤṲŲṶṴṸṺǛǗǕǙỪỨỮỬỰ' .
        'uùúûũūŭüủůűǔȕȗưụṳųṷṵṹṻǖǜǘǖǚừứữửự'
    ;
    
    // set necessary encodings
    mb_internal_encoding('UTF-8');
    mb_regex_encoding('UTF-8');
    
    // and loop
    foreach ($arr as $word) {
    
        $vow = mb_ereg_replace('[^'.$vowels.']','',$word);
        // get rid of all consonants (non-vowels in this pattern)
        $lastVw = mb_substr($vow,-1);
        // and get the last one from the remaining vowels
    
        if (empty($lastVw))
        // it evaluates this line when there's no vowel in the string
            echo "there's no vowel in <b>\"$word\"</b>." . PHP_EOL;
        else
        // and vice versa
            echo "last vowel in <b>\"$word\"</b> is " .
            "<span style=\"color:#F00\">{$lastVw}</span>" . PHP_EOL;    
    }
    

    Here's the output.

    last vowel in "Apple" is e
    last vowel in "Tea" is a
    there's no vowel in "Strng".
    last vowel in "queue" is e
    last vowel in "asartä" is ä
    last vowel in "nő" is ő
    last vowel in "ağır" is ı
    last vowel in "NOËL" is Ë
    last vowel in "gør" is ø
    last vowel in "æsc" is æ