Nie regex lub wywołania zwrotne konieczne. Prawie cała praca może być wykonywana z ucwords:
function dashesToCamelCase($string, $capitalizeFirstCharacter = false)
{
$str = str_replace(' ', '', ucwords(str_replace('-', ' ', $string)));
if (!$capitalizeFirstCharacter) {
$str[0] = strtolower($str[0]);
}
return $str;
}
echo dashesToCamelCase('this-is-a-string');
Jeśli używasz PHP> = 5.3, można użyć zamiast lcfirst strtolower.
Aktualizacja
Drugi parametr został dodany do ucwords w PHP 5.04.32/5.5.16 co oznacza, że nie trzeba najpierw zmienić kreski do przestrzeni (dzięki Lars Ebert i peterm za wskazanie tego). Oto zaktualizowany kod:
function dashesToCamelCase($string, $capitalizeFirstCharacter = false)
{
$str = str_replace('-', '', ucwords($string, '-'));
if (!$capitalizeFirstCharacter) {
$str = lcfirst($str);
}
return $str;
}
echo dashesToCamelCase('this-is-a-string');
'if (! $ CapitalizeFirstCharacter) { $ str = lcfirst ($ str); } ' – AVProgrammer
Zauważ, że' ucwords' faktycznie akceptuje separator jako drugi parametr (patrz [odpowiedź od PeterM] (http://stackoverflow.com/a/33122760/2580794)), więc jedno z wywołań 'str_replace' byłoby niepotrzebne. –
Dzięki za informację @LarsEbert. Zaktualizowałem odpowiedź. – webbiedave