Nie są potrzebne żadne wyrażenia regularne ani wywołania zwrotne. Prawie całą pracę można wykonać za pomocą 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żesz użyć lcfirst zamiast strtolower.
Aktualizacja
Drugi parametr został dodany do ucwords w PHP 5.4.32 / 5.5.16, co oznacza, że nie musimy najpierw zamieniać myślników na spacje (dzięki Larsowi Ebertowi i PeterM za zwrócenie na to uwagi). 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); }