Как сделать первые и последние буквы заглавными в слове (следовательно, в нескольких строках) Переполнение стека

То, что я сейчас пытаюсь сделать, это сделать первые и последние буквы слова (ей) заглавными.

В настоящее время это моя функция:

function ManipulateStr($input){
return strrev(ucwords(strrev($input)));
}

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

Пример:

вход: привет мои друзья

выход: HellO МОИ ДРУЗЬЯ

Возможно, мне придется использовать substr? Но как это работает, если я хочу, чтобы это было применимо к нескольким словам или одному слову?

3

Решение

Впервые сделайте вашу строку строчными, используя strtolower а затем использовать функцию ucwords использовать первый символ с заглавной буквы, а затем использовать strrev снова и применить ucwords для заглавных букв других первых символов.
затем, наконец, использовать strrev для возврата исходной строки с заглавными буквами первого и последнего символа.

Обновленная функция

function ManipulateStr($input){
return strrev(ucwords(strrev(ucwords(strtolower($input)))));
}
5

Другие решения

Если вы ищете удивительно быструю функцию (~ 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)
)
);
}
0

По вопросам рекламы [email protected]