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()andstrtoupper()调用。

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

秘密在于模运算符。;)

编辑:当,我刚刚注意到 Jordan Arsenault 在我上面的帖子已经提交了这个答案......我被正则表达式的答案卡住了,我错过了:-/对不起,乔丹,你已经说对了。

于 2011-05-04T06:58:50.087 回答