Капатализировать каждую другую букву ... - PullRequest
2 голосов
/ 04 мая 2011

Как бы я использовал заглавные буквы в строке?Я знаю, как конвертировать в нижний или верхний или первый и т. Д., Но не знаю, как поступить друг с другом.Чтобы было ясно, я включил примеры.Кроме того, это для создания шифра, с которым я и мой сын возимся, я бы никогда не отформатировал обычный текст таким образом.

pizza -> PiZzA
party -> PaRtY
popcorn -> PoPcOrN

Ответы [ 4 ]

12 голосов
/ 04 мая 2011
$newStr = '';
foreach(str_split($str) as $index => $char) {
    $newStr .= ($index % 2) ? strtolower($char) : strtoupper($char);
}

CodePad .

3 голосов
/ 04 мая 2011

Я попробую что-то вроде этого:

$string = join(
    array_map(
        function($s){
            return ucfirst($s);
        },
        str_split($string,2)
    )
);

или, как однострочный:

$string = join(array_map(function($s){return ucfirst($s);}, str_split($string,2)));

Вы можете обобщить функцию, передавая в качестве параметра длину порции, которая будет заглавной и позволяя функции делать работу. Алгоритм прост:

  • str_split возвращает массив строк желаемой длины,
  • функция array_map добавляет преобразование к чанкам и
  • соединение склеивает строки в результирующую строку.

Последняя функция:

function camelCycles($string, $period) {
  return join(
     array_map(
       function($s){
         return ucfirst($s);
       },
       str_split($string, $period)
     )
  );
}

Он использует только нативные конструкции и поэтому должен быть довольно быстрым.

EDIT:

Функция, которая не использует лямбду и поэтому подходит для PHP 5.0 и более поздних версий, так как str_split был представлен в выпуске php5

function camelCycles($string, $span) {
  return join(array_map('ucfirst', str_split(strtolower($string), $span)));
}
1 голос
/ 04 мая 2011
function spasticafy($st)
{
    $r = '';
    $n = false;

    foreach(str_split($st) as $i)
    {
        $r .= ($n ? strtoupper($i) : $i);
        $n = !$n;
    }

    return $r;
}

echo spasticafy("hello there, mr person sir");
1 голос
/ 04 мая 2011

Я бы разделил его как массив, а затем подключил снова:

function strtoupper_lower($str){
     $temp = explode('',$str);
     $return = '';
     foreach($temp as $i=>$val){
         if($i%1 == 0) $return .= strtolower($val);
         else $return .= strtolower($val);
     } 
     return $return;
}
...