Как сделать первую и последнюю буквы прописными в слове (следовательно, несколько строк) php


В настоящее время я пытаюсь сделать так, чтобы первая и последняя буквы слова(ОВ) были прописными.

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

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

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

Пример:

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

Вывод: Здравствуйте мои друзья

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

2 3

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