1

最初に、文字列内の他のすべての文字を大文字にする解決策を見つけるために質問を投稿しました。ありがたいことに、Alex @ SOF は優れたソリューションを提供することができましたが、配列で動作させることができませんでした...この場合に何をしようとしているのかを明確にするために、引用符を爆発させ、配列内の他のすべての文字を大文字にします。それらを内破します。

if (stripos($data, 'test') !== false) {
$arr = explode('"', $data);

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

$data = implode('"', $arr);
}
4

3 に答える 3

3

匿名関数を使用するには、>= PHP 5.3 が必要です。そうでない場合は、コールバックを通常の関数にします。を使用できますcreate_function()が、かなり醜いです。

$str = '"hello" how you "doing?"';

$str = preg_replace_callback('/"(.+?)"/', function($matches) {
  $newStr = '';
   foreach(str_split($matches[0]) as $index => $char) {
       $newStr .= ($index % 2) ? strtolower($char) : strtoupper($char);
   }
   return $newStr;

}, $str);

var_dump($str);

出力

string(24) ""hElLo" how you "dOiNg?""

コードパッド

ケースを入れ替えたい場合は、strtolower()とのstrtoupper()呼び出しを入れ替えます。

于 2011-05-04T06:00:14.360 に答える
2

これはあなたが探しているものですか?

 foreach($data as $key => $val)
    {
       if($key%2==0) $data[$key] = strtoupper($data[$key]);
       else $data[$key] = strtolower($data[$key]);
    }
于 2011-05-04T05:58:50.100 に答える
1

または....正規表現を使用する代わりに、explodeメソッドを使用することもできず、他のすべての文字と一緒に使用して大文字にすることもできません。次に例を示します。

$test = "test code here";

        $count = strlen($test);
        echo "Count = " . $count . '<br/>';
        for($i = 0; $i < $count; $i++)
        {
            if($i % 2 == 0)
            {
                $test[$i] = strtolower($test[$i]);
            }
            else 
            {
                $test[$i] = strtoupper($test[$i]);
            }
        }
        echo "Test = " . $test;

その秘密はモジュラス演算子にあります。;)

編集:ダン、私はちょうどジョーダン・アルセノーによる私の上の投稿がすでにこの答えを提出していることに気づきました...私はそれを逃した正規表現の答えで立ち往生しました:-/申し訳ありませんがジョーダン、あなたはすでに正しいです。

于 2011-05-04T06:58:50.087 に答える