Không regex hoặc callbacks cần thiết. Hầu như tất cả các công việc có thể được thực hiện với 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');
Nếu bạn đang sử dụng PHP> = 5.3, bạn có thể sử dụng lcfirst thay vì strtolower.
Cập nhật
Một tham số thứ hai được bổ sung vào ucwords trong PHP 5.4.32/5.5.16 có nghĩa là chúng ta không cần phải đầu tiên thay đổi dấu gạch ngang để không gian (nhờ Lars Ebert và PeterM cho trỏ này ra). Đây là mã Cập nhật:
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
Lưu ý rằng' ucwords' thực sự chấp nhận dấu phân tách làm tham số thứ hai (xem [answer by PeterM] (http://stackoverflow.com/a/33122760/2580794)), vì vậy một trong các lệnh gọi str_replace' sẽ là không cần thiết. –
Cảm ơn thông tin @LarsEbert. Tôi đã cập nhật câu trả lời. – webbiedave