Intereting Posts
Как создать общий шаблон с верхним и нижним колонтитулом для проектов phalcon с помощью Volt Engine Mysql, выберите идентификатор, сгруппированный по отдельному столбцу (выберите все идентификаторы для каждого уникального домена) Может ли кто-то скомпилировать расширение DLL для runkit PHP для меня? Вывод всех ошибок PHP в базу данных not error_log Mysql: Общая ошибка: 1366 Неверное строковое значение Как перенаправить пользователя в мобильное приложение или веб-сайт при нажатии гиперссылки, отправленной по электронной почте? Должно ли это быть обработано на стороне сервера с помощью PHP? PHP – Загрузка изображения и отображение на странице AppEngine DataStore – GQL не возвращает никаких результатов Профилактика XSS в PHP Запрос на перекрестный запрос заблокирован: проблема при отправке заголовков в запрос Angular2 на laravel Использование MOODLE создает пользователей и регистрирует их на курсах через SQL Mod Rewrite – есть ли более быстрый способ? Использование NSURLRequest для передачи пар ключ-значение в PHP-скрипт с помощью POST Мой PHP-код закомментирован простое объяснение PHP OOP и процедурный?

Как обнаружить и повторить последний гласный в слове?

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

Как я могу обнаружить и повторить последний гласный данного слова с помощью php? Я пробовал функцию preg_match, google'd в течение нескольких часов, но не смог найти правильное решение.

В строке могут быть многобайтовые буквы, такие как ü, ö.

Вот многобайтовая безопасная версия, которая ловит последнюю гласную в строке.

 $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; } 

Вот результат.

последний гласный в «Яблоке» – это
последний гласный в «Чае»это
в «Strng» нет гласного.
последний гласный в «очереди» – это e
последний гласный в «асарте» – это
последний гласный в «nő» есть ő
последний гласный в «ağır» – это
последний гласный в «NOËL» равен Ë
последний гласный в «gør»ø
последний гласный в «æsc»æ

 $word = "Acrobat"; $vowels = array_intersect(str_split($word), array('A','E','I','O','U','a','e','i','o','u')); echo array_pop($vowels); 
 function last_vowel($word) { for ($i = strlen($word) - 1; $i >= 0; --$i) { switch (strtolower($word[$i])) { case 'a': case 'e': case 'i': case 'o': case 'u': case 'y': return $word[$i]; } } return null; } echo last_vowel("Apple"); 

используйте метод str_split ()

http://www.php.net/manual/en/function.str-split.php

это преобразует вашу строку в массив, тогда вы можете использовать индекс массива в поиске первой и последней буквы вашей строки.

-Array [0] – первая буква. * Массив [общее число букв – 1] – последняя буква.

После получения первого и последнего элементов массива начинается отображение. например: if (letter == "a" || letter == "A") echo "Apple";

и так далее…

Я бы сказал, что ответы Эд или Марка определенно более эффективны, но если вам нужен пример рекурсивной функции, то это:

 $word = "stellar"; function lastVowel($word) { $vowels = array('a','e','i','o','u'); $letter = substr($word, strlen($word) - 1); if(in_array(strtolower($letter), $vowels)) return $letter; else { if(strlen($word) > 0) return lastVowel(substr($word, 0, strlen($word) - 1)); else return "no vowels"; } } echo lastVowel($word); 

Имейте в виду, что есть лучшие способы сделать это. Просто давая конкретный пример, не обязательно «лучший».

Я лично использовал бы preg_match() для этой задачи.

 $arr = array( 'Apple','Tea','Strng','queue' ); foreach ($arr as $word) { preg_match('~[aeiou](?=[^aeiou]*$)~i',$word,$m); if (empty($m)) echo "there's no vowel in \"$word\"."; else echo "last vowel in \"$word\" is <b style=\"color:#F00\">{$m[0]}</b>"; echo PHP_EOL; } 

Это приведет к выводу

последний гласный в «Яблоке» – это
последний гласный в «Чае» – это
в «Strng» нет гласного.
последний гласный в «очереди» – это e