То, что я сейчас пытаюсь сделать, это сделать первые и последние буквы слова (ей) заглавными.
В настоящее время это моя функция:
function ManipulateStr($input){
return strrev(ucwords(strrev($input)));
}
Однако это только меняет последнюю букву каждого слова на верхний регистр, и теперь я пытаюсь обдумать, как также получить первую букву каждого слова с заглавной буквы.
Пример:
вход: привет мои друзья
выход: HellO МОИ ДРУЗЬЯ
Возможно, мне придется использовать substr? Но как это работает, если я хочу, чтобы это было применимо к нескольким словам или одному слову?
Впервые сделайте вашу строку строчными, используя strtolower
а затем использовать функцию ucwords
использовать первый символ с заглавной буквы, а затем использовать strrev
снова и применить ucwords
для заглавных букв других первых символов.
затем, наконец, использовать strrev
для возврата исходной строки с заглавными буквами первого и последнего символа.
Обновленная функция
function ManipulateStr($input){
return strrev(ucwords(strrev(ucwords(strtolower($input)))));
}
Если вы ищете удивительно быструю функцию (~ 20% быстрее), чем Фрейн при условии, попробуйте это:
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)
)
);
}