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

CodePad

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

ネイティブ構造のみを使用するため、非常に高速である必要があります。

編集:

str_splitがphp5リリースで導入されたため、ラムダを使用しないため、PHP5.0以降に適した関数

function camelCycles($string, $span) {
  return join(array_map('ucfirst', str_split(strtolower($string), $span)));
}
于 2011-05-04T02:37:35.060 に答える
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 に答える
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 に答える