文字列内の他のすべての文字をどのように大文字にしますか?下、上、最初などに変換する方法は知っていますが、お互いにどうやって行くのかわかりません。明確にするために、例を含めました。また、これは私の息子と私がいじり回している暗号を作成するためのものであり、私はこの方法で通常のテキストをフォーマットすることは決してありません。
pizza -> PiZzA
party -> PaRtY
popcorn -> PoPcOrN
$newStr = '';
foreach(str_split($str) as $index => $char) {
$newStr .= ($index % 2) ? strtolower($char) : strtoupper($char);
}
私はこのようなことを試みます:
$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)));
大文字にするチャンクの長さをパラメーターとして渡す関数を一般化し、関数に作業を任せることができます。アルゴリズムは単純です。
最後の関数は次のとおりです。
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)));
}
私はそれを配列として分割し、それからそれを一緒に再接続します:
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;
}
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");