在爆炸阵列中大写所有其他字母

时间:2011-05-04 05:54:06

标签: php uppercase lowercase

最初我发布了一个问题,找到一个解决方案来大写字母表中的所有其他字母。值得庆幸的是,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);
}

3 个答案:

答案 0 :(得分: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?""

CodePad

如果您想更换案例,请更换strtolower()strtoupper()来电。

答案 1 :(得分:2)

这是你要找的吗?

 foreach($data as $key => $val)
    {
       if($key%2==0) $data[$key] = strtoupper($data[$key]);
       else $data[$key] = strtolower($data[$key]);
    }

答案 2 :(得分: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;

秘密在于模数运算符。 ;)

编辑:Dang,我刚注意到我上面的帖子,Jordan Arsenault已经提交了这个答案......我对这个正则表达式的答案感到困惑我错过了这个: - /抱歉乔丹,你已经上了点。