最初我发布了一个问题,找到一个解决方案来大写字母表中的所有其他字母。值得庆幸的是,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);
}
答案 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?""
如果您想更换案例,请更换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已经提交了这个答案......我对这个正则表达式的答案感到困惑我错过了这个: - /抱歉乔丹,你已经上了点。