如何在单词的首尾字母大写(包括多个字符串)PHP

3
目前我正在努力实现的是将单词的第一个和最后一个字母大写。目前我的函数如下:
function ManipulateStr($input){
    return strrev(ucwords(strrev($input)));
}

然而,这只会将每个单词的最后一个字母改为大写,现在我正在努力理解如何使每个单词的第一个字母也大写。

例如:

输入:hello my friends

输出:HellO MY FriendS

也许我需要使用 substr?但是如果我想要应用于多个单词或单个单词,那该怎么办呢?


4
return ucwords(strrev(ucwords(strrev($input)))); - splash58
your desired output please.. - Murad Hasan
@FrayneKonok - 问题中已经有了答案: output: HellO MY FriendS - j08691
非常感谢!我有一种感觉,我漏掉了一些小东西! - joe dirt
input: hello, my friEnds 应该产生什么结果? - MonkeyZeus
看起来像是一道面试题? :) - NickG
2个回答

5

首先使用 strtolower 将字符串全部转换为小写,然后使用函数 ucwords 将第一个字符大写,再次使用 strrev 反转字符串并且应用 ucwords 来大写其他的第一个字符。 最后使用 strrev 得到原始字符串,首尾字符都为大写。

更新后的函数

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

0
如果您正在寻找比Frayne提供的函数更快(约快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)
        )
    );
}

我担心这会在带有标点符号的字符串上产生错误的结果。 - mickmackusa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接