【问题标题】:Capatalize every other letter...其他字母大写...
【发布时间】:2011-08-18 04:20:08
【问题描述】:

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

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

【问题讨论】:

  • +1 包含示例和非常清晰的解释。 :)

标签: php uppercase lowercase


【解决方案1】:
$newStr = '';
foreach(str_split($str) as $index => $char) {
    $newStr .= ($index % 2) ? strtolower($char) : strtoupper($char);
}

CodePad.

【讨论】:

  • 快速解释发生了什么:他正在使用内联条件(即? 语句)来检查位置是否是偶数。如果是偶数,请将其大写 - 否则请确保它是小写的。祝你好运!反响不错。 +1
  • 完美运行,感谢@Alex 和@RageD 的解释。
  • @Ryan 不用担心,只要确保你和你的儿子留着 :)
  • @Alex 你知道数组是否可以实现相同的概念?我正在爆炸引号运行资本转换并将它们内爆,但显然 str_split 需要一个字符串。对 ping 感到抱歉,将代码移至主要问题。
  • @Ryan foreach() 是一个数组迭代器,所以只需将数组直接传递给它。我用str_split()将字符串转换成数组,所以foreach()不会抱怨。
【解决方案2】:

我会尝试这样的:

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

【讨论】:

  • +1 表示与众不同。请注意,人们需要 >= PHP 5.3 才能工作。此外,您可以将 '' 参数删除到 join() 并且它会更短:)
  • @alex 你知道,我正在做很多 javascript 和 lambdas 无处不在,特别是在不需要它们的时候。加入提示的要点,我会应用它
  • 那个新的很性感。 :)
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:
    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");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 2015-10-24
      • 2019-08-23
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      相关资源
      最近更新 更多