Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

แปลง Dashes เป็น CamelCase ใน PHP

แปลง 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 (อาจต้องปรับเพิ่ม)