แปลง String แบบ this-is-a-test ให้กลายเป็น thisIsATest (lowerCamelCase) หรือ ThisIsATest (UpperCamelCase/PascalCase)
วิธีที่ 1: ใช้ ucwords + str_replace (PHP ทุก Version)
function dashToCamelCase($string, $capitalizeFirstCharacter = false) {
// แทนที่ - ด้วย Space, ucwords ทำให้ตัวแรกของแต่ละคำใหญ่, แล้วลบ Space
$str = str_replace(' ', '', ucwords(str_replace('-', ' ', $string)));
if (!$capitalizeFirstCharacter) {
$str[0] = strtolower($str[0]); // ตัวแรกเล็ก
}
return $str;
}
echo dashToCamelCase('this-is-a-test-string'); // thisIsATestString
echo dashToCamelCase('this-is-a-test-string', true); // ThisIsATestString
วิธีที่ 2: ใช้ ucwords กับ Delimiter (PHP 5.3+, เร็วกว่า)
function dashToCamelCase($string, $capitalizeFirstCharacter = false) {
// ucwords รองรับ delimiter ตัวที่ 2 ตั้งแต่ PHP 5.3
$str = str_replace('-', '', ucwords($string, '-'));
if (!$capitalizeFirstCharacter) {
$str = lcfirst($str); // ตัวแรกเล็ก (ดีกว่า strtolower($str[0]))
}
return $str;
}
วิธีที่ 3: รองรับหลาย Separator (-, _, space)
function toCamelCase($string, $capitalizeFirst = false, $separators = ['-', '_', ' ']) {
$str = $string;
foreach ($separators as $sep) {
$str = str_replace($sep, ' ', $str);
}
$str = str_replace(' ', '', ucwords($str));
return $capitalizeFirst ? $str : lcfirst($str);
}
echo toCamelCase('this-is_a-test'); // thisIsATest
echo toCamelCase('this_is_a_test', true); // ThisIsATest
วิธีที่ 4: ใช้ Regex (ยืดหยุ่นที่สุด)
function dashToCamelCaseRegex($string, $capitalizeFirst = false) {
$callback = function($matches) {
return strtoupper($matches[1]);
};
// หา - ตามด้วยตัวอักษร แล้วแทนที่ด้วยตัวใหญ่
$str = preg_replace_callback('/-([a-z])/i', $callback, $string);
return $capitalizeFirst ? ucfirst($str) : lcfirst($str);
}
ตัวอย่างการใช้งานจริง
// CSS Property -> JavaScript Style Property
$cssProps = ['font-size', 'background-color', 'margin-top', 'z-index'];
$jsProps = array_map('dashToCamelCase', $cssProps);
// ['fontSize', 'backgroundColor', 'marginTop', 'zIndex']
// Database Column -> PHP Property
$dbColumns = ['user_id', 'first_name', 'created_at'];
$phpProps = array_map(fn($c) => dashToCamelCase($c, true), $dbColumns);
// ['UserId', 'FirstName', 'CreatedAt']
ฟังก์ชันกลับ: CamelCase to Dashes (Kebab-case)
function camelCaseToDash($string) {
// ใส่ - ก่อนตัวใหญ่ แล้ว lowercase ทั้งหมด
return strtolower(preg_replace('/([a-z])([A-Z])/', '$1-$2', $string));
}
echo camelCaseToDash('thisIsATest'); // this-is-a-test
echo camelCaseToDash('ThisIsATest'); // this-is-a-test
echo camelCaseToDash('XMLHttpRequest'); // x-m-l-http-request (อาจต้องปรับเพิ่ม)