If this works, why not use it? If you don't parse a lot of text, you probably won't notice the difference.
The only thing I see is that with your code the first letter will also be capitalized, so maybe you can add this:
foreach($parts as $k=>$part) $new_string .= ($k == 0) ? strtolower($part) : ucfirst($part);
source share