Я попробую что-то вроде этого:
$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)));
}