Как сделать первую и последнюю буквы прописными в слове (следовательно, несколько строк) php
В настоящее время я пытаюсь сделать так, чтобы первая и последняя буквы слова(ОВ) были прописными.
В настоящее время это моя функция:
function ManipulateStr($input){
return strrev(ucwords(strrev($input)));
}
Однако это только меняет последнюю букву каждого слова на заглавную, теперь я пытаюсь обернуть свой ум вокруг того, как также получить первую букву каждого слова с заглавной буквы.
Пример:
Вход: привет, друзья
Вывод: Здравствуйте мои друзья
Возможно, мне придется использовать функцию substr? Но как это будет работать, если я хочу, чтобы это было применимо либо к нескольким словам, либо к одному слову?
2 ответа:
В первый раз сделайте строку полностью строчной с помощью
strtolower
, а затем используйте функциюucwords
Для заглавной буквы первого символа, затем снова используйтеstrrev
и применитеucwords
Для заглавной буквы других первых символов. затем, наконец, используйтеstrrev
для возврата исходной строки с заглавными буквами первого и последнего символа.Обновленная Функция
function ManipulateStr($input){ return strrev(ucwords(strrev(ucwords(strtolower($input))))); }
Если вы ищете удивительно быструю функцию (~20% быстрее), чем Frayne, то попробуйте следующее:
function ManipulateStr($input) { return implode( ' ', // Re-join string with spaces array_map( function($v) { // UC the first and last chars and concat onto middle of string return strtoupper(substr($v, 0, 1)). substr($v, 1, (strlen($v) - 2)). strtoupper(substr($v, -1, 1)); }, // Split the input in spaces // Map to anonymous function for UC'ing each word explode(' ', $input) ) ); // If you want the middle part to be lower-case then use this return implode( ' ', // Re-join string with spaces array_map( function($v) { // UC the first and last chars and concat onto LC'ed middle of string return strtoupper(substr($v, 0, 1)). strtolower(substr($v, 1, (strlen($v) - 2))). strtoupper(substr($v, -1, 1)); }, // Split the input in spaces // Map to anonymous function for UC'ing each word explode(' ', $input) ) ); }