2016-08-03 98 views
0

我试图编写一个简单的程序,它将字符串中的every 4th letter(不是字符)写入并且将case更改为相反(如果它的位置较低,将其更改为上或反之亦然)。在PHP中改变字符串中每个第n个字母的大小写

我到目前为止有:

echo preg_replace_callback('/.{5}/', function ($matches){ 
      return ucfirst($matches[0]); 
    }, $strInput); 

预期结果:"The sky is blue"应该输出"The Sky iS bluE"

回答

1

试试这个:

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

它利用字符串的每个第2个字符

+1

要求是不计空格 – Saurabh

+0

更改%2%4 –

+0

每4个字符似乎对资本的每2字像你说的工作,但是当我将其更改为4它不给我正确的输出。当我改变...“($ index%4)”时,它给了我输出:“天空是bLue”“... – eksiekso

1
<?php 
    $str = "The sky is blue"; 
    $str = str_split($str); 
    $nth = 4; // the nth letter you want to replace 
    $cnt = 0; 
    for ($i = 0; $i < count($str); $i++) { 
     if($str[$i]!=" " && $cnt!=$nth) 
      $cnt++; 
     if($cnt==$nth) 
     { 
      $cnt=0; 
      $str[$i] = ctype_upper($str[$i])?strtolower($str[$i]):strtoupper($str[$i]); 
     } 
    } 
    echo implode($str); 
?> 

此代码可以满足您的所有条件。

编辑:

我会用

$str = str_replace(" ","",$str); 

忽略字符串中的空格。但是,如果您希望它们在输出中保持原样,那么必须应用上述逻辑。

+0

这很有效,谢谢!最后一件事。任何代码,我可以添加到这个让它不计数逗号(以便它只计算每个第n个字母和排除符号)? – eksiekso

+0

你可以把它放在if条件本身,其中空白与字符进行比较。 (例如:$ str [$ i]!=“,”)它会起作用。 –

2
$str = 'The sky is blue'; 
    $strArrWithSpace = str_split ($str); 
    $strWithoutSpace = str_replace(" ", "", $str); 
    $strArrWithoutSpace = str_split ($strWithoutSpace); 
    $updatedStringWithoutSpace = ''; 
    $blankPositions = array(); 
    $j = 0; 
    foreach ($strArrWithSpace as $key => $char) { 
     if (empty(trim($char))) { 
      $blankPositions[] = $key - $j; 
      $j++; 
     } 
    } 

    foreach ($strArrWithoutSpace as $key => $char) { 
     if (($key +1) % 4 === 0) { 
      $updatedStringWithoutSpace .= strtoupper($char); 
     } else { 
      $updatedStringWithoutSpace .= $char; 
     } 

    } 

    $arrWithoutSpace = str_split($updatedStringWithoutSpace); 
    $finalString = ''; 
    foreach ($arrWithoutSpace as $key => $char) { 
     if (in_array($key, $blankPositions)) { 
      $finalString .= ' ' . $char; 
     } else { 
      $finalString .= $char; 
     } 
    } 

    echo $finalString;