2

我如何将字符串中的所有其他字母大写?我知道如何转换为较低或较高或第一个等,但不知道如何相互转换。为了清楚起见,我已经包含了示例。这也是为了创建我儿子和我正在搞乱的密码,我永远不会以这种方式格式化常规文本。

pizza -> PiZzA
party -> PaRtY
popcorn -> PoPcOrN
4

4 回答 4

12
$newStr = '';
foreach(str_split($str) as $index => $char) {
    $newStr .= ($index % 2) ? strtolower($char) : strtoupper($char);
}

键盘

于 2011-05-04T02:31:57.007 回答
3

我会尝试这样的事情:

$string = join(
    array_map(
        function($s){
            return ucfirst($s);
        },
        str_split($string,2)
    )
);

或者,作为单行:

$string = join(array_map(function($s){return ucfirst($s);}, str_split($string,2)));

您可以概括将要大写的块的长度作为参数传递的函数,并让函数完成工作。该算法很简单:

  • str_split 返回所需长度的字符串数组,
  • array_map 函数将转换添加到块和
  • 连接将字符串粘合到结果字符串中。

最后的功能是:

function camelCycles($string, $period) {
  return join(
     array_map(
       function($s){
         return ucfirst($s);
       },
       str_split($string, $period)
     )
  );
}

它仅使用本机构造,因此应该非常快。

编辑:

一个不使用 lambda 的函数,因此适用于 PHP 5.0 及更高版本,因为 str_split 是在 php5 版本中引入的

function camelCycles($string, $span) {
  return join(array_map('ucfirst', str_split(strtolower($string), $span)));
}
于 2011-05-04T02:37:35.060 回答
1
function spasticafy($st)
{
    $r = '';
    $n = false;

    foreach(str_split($st) as $i)
    {
        $r .= ($n ? strtoupper($i) : $i);
        $n = !$n;
    }

    return $r;
}

echo spasticafy("hello there, mr person sir");
于 2011-05-04T02:34:25.887 回答
1

我会将其拆分为一个数组,然后将其重新连接在一起:

function strtoupper_lower($str){
     $temp = explode('',$str);
     $return = '';
     foreach($temp as $i=>$val){
         if($i%1 == 0) $return .= strtolower($val);
         else $return .= strtolower($val);
     } 
     return $return;
}
于 2011-05-04T02:32:54.643 回答