ใครช่วยฉันทำฟังก์ชัน PHP นี้ให้สมบูรณ์ได้ไหม ฉันต้องการใช้สตริงแบบนี้: 'this-is-a-string' และแปลงเป็นสิ่งนี้: 'thisIsAString':
function dashesToCamelCase($string, $capitalizeFirstCharacter = false) {
// Do stuff
return $string;
}
ใครช่วยฉันทำฟังก์ชัน PHP นี้ให้สมบูรณ์ได้ไหม ฉันต้องการใช้สตริงแบบนี้: 'this-is-a-string' และแปลงเป็นสิ่งนี้: 'thisIsAString':
function dashesToCamelCase($string, $capitalizeFirstCharacter = false) {
// Do stuff
return $string;
}
คำตอบ:
ไม่จำเป็นต้องใช้นิพจน์ทั่วไปหรือการเรียกกลับ งานเกือบทั้งหมดสามารถทำได้ด้วย 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');
หากคุณใช้ PHP> = 5.3 คุณสามารถใช้ lcfirst แทน strtolower ได้
พารามิเตอร์ที่สองถูกเพิ่มลงใน ucwords ใน PHP 5.4.32 / 5.5.16 ซึ่งหมายความว่าเราไม่จำเป็นต้องเปลี่ยนขีดกลางเป็นช่องว่างก่อน (ขอบคุณ Lars Ebert และ PeterM ที่ชี้ให้เห็น) นี่คือรหัสที่อัปเดต:
function dashesToCamelCase($string, $capitalizeFirstCharacter = false)
{
$str = str_replace('-', '', ucwords($string, '-'));
if (!$capitalizeFirstCharacter) {
$str = lcfirst($str);
}
return $str;
}
echo dashesToCamelCase('this-is-a-string');
ucwords
ยอมรับตัวคั่นเป็นพารามิเตอร์ที่สอง (ดูคำตอบของ PeterM ) ดังนั้นหนึ่งในการstr_replace
เรียกจะไม่จำเป็น
$str = ! $capitalizeFirstCharacter ? lcfirst($str) : $str;
เป็นหลักเพื่อความสามารถในการอ่าน (แม้ว่าบางคนอาจไม่เห็นด้วย) และ / หรือลดความซับซ้อนของโค้ด
สิ่งนี้สามารถทำได้อย่างง่ายดายโดยใช้ucwordsซึ่งยอมรับตัวคั่นเป็นพารามิเตอร์:
function camelize($input, $separator = '_')
{
return str_replace($separator, '', ucwords($input, $separator));
}
หมายเหตุ:ต้องการ php อย่างน้อย 5.4.32, 5.5.16
return str_replace($separator, '', lcfirst(ucwords($input, $separator)));
ucwords
มีพารามิเตอร์ที่สองdelimiter
จึงstr_replace("_", "", ucwords($input, "_"));
ดีพอ (ในกรณีส่วนใหญ่: P
นี่คือรูปแบบของฉันเกี่ยวกับวิธีจัดการกับมัน ที่นี่ฉันมีสองฟังก์ชั่นหนึ่งcamelCase ตัวแรกเปลี่ยนทุกอย่างให้เป็น camelCase และมันจะไม่ยุ่งถ้าตัวแปรมี cameCase อยู่แล้ว UncamelCaseที่สองเปลี่ยน camelCase เป็นขีดล่าง (คุณสมบัติที่ยอดเยี่ยมเมื่อจัดการกับคีย์ฐานข้อมูล)
function camelCase($str) {
$i = array("-","_");
$str = preg_replace('/([a-z])([A-Z])/', "\\1 \\2", $str);
$str = preg_replace('@[^a-zA-Z0-9\-_ ]+@', '', $str);
$str = str_replace($i, ' ', $str);
$str = str_replace(' ', '', ucwords(strtolower($str)));
$str = strtolower(substr($str,0,1)).substr($str,1);
return $str;
}
function uncamelCase($str) {
$str = preg_replace('/([a-z])([A-Z])/', "\\1_\\2", $str);
$str = strtolower($str);
return $str;
}
ให้ทดสอบทั้งสอง:
$camel = camelCase("James_LIKES-camelCase");
$uncamel = uncamelCase($camel);
echo $camel." ".$uncamel;
ซับเดียวเกินพิกัดพร้อม doc block ...
/**
* Convert underscore_strings to camelCase (medial capitals).
*
* @param {string} $str
*
* @return {string}
*/
function snakeToCamel ($str) {
// Remove underscores, capitalize words, squash, lowercase first.
return lcfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $str))));
}
null
return
... อัปเดตขอบคุณ นี่คือลิงค์สำหรับทดสอบ3v4l.org/YBHPd
ฉันอาจจะใช้preg_replace_callback()
เช่นนี้:
function dashesToCamelCase($string, $capitalizeFirstCharacter = false) {
return preg_replace_callback("/-[a-zA-Z]/", 'removeDashAndCapitalize', $string);
}
function removeDashAndCapitalize($matches) {
return strtoupper($matches[0][1]);
}
คุณกำลังมองหาpreg_replace_callbackคุณสามารถใช้งานได้ดังนี้:
$camelCase = preg_replace_callback('/-(.?)/', function($matches) {
return ucfirst($matches[1]);
}, $dashes);
function camelize($input, $separator = '_')
{
return lcfirst(str_replace($separator, '', ucwords($input, $separator)));
}
echo ($this->camelize('someWeir-d-string'));
// output: 'someWeirdString';
$string = explode( "-", $string );
$first = true;
foreach( $string as &$v ) {
if( $first ) {
$first = false;
continue;
}
$v = ucfirst( $v );
}
return implode( "", $string );
รหัสที่ยังไม่ทดสอบ ตรวจสอบเอกสาร PHP สำหรับฟังก์ชัน im- / explode และ ucfirst
หนึ่งซับ PHP> = 5.3:
$camelCase = lcfirst(join(array_map('ucfirst', explode('-', $url))));
นี่คือวิธีแก้ปัญหาที่ง่ายมากในโค้ดบรรทัดเดียว
$string='this-is-a-string' ;
echo str_replace('-', '', ucwords($string, "-"));
เอาต์พุต ThisIsAString
หรือหากคุณไม่ต้องการจัดการกับ regex และต้องการหลีกเลี่ยงการวนซ้ำอย่างชัดเจน :
// $key = 'some-text', after transformation someText
$key = lcfirst(implode('', array_map(function ($key) {
return ucfirst($key);
}, explode('-', $key))));
อีกวิธีง่ายๆ:
$nasty = [' ', '-', '"', "'"]; // array of nasty characted to be removed
$cameled = lcfirst(str_replace($nasty, '', ucwords($string)));
ไลบรารี TurboCommons มีเมธอด formatCase () วัตถุประสงค์ทั่วไปภายในคลาส StringUtils ซึ่งช่วยให้คุณสามารถแปลงสตริงเป็นรูปแบบเคสทั่วไปได้มากมายเช่น CamelCase, UpperCamelCase, LowerCamelCase, snake_case, Title Case และอื่น ๆ อีกมากมาย
https://github.com/edertone/TurboCommons
ในการใช้งานให้นำเข้าไฟล์ phar ไปยังโครงการของคุณและ:
use org\turbocommons\src\main\php\utils\StringUtils;
echo StringUtils::formatCase('sNake_Case', StringUtils::FORMAT_CAMEL_CASE);
// will output 'sNakeCase'
นี่คือลิงค์ไปยังซอร์สโค้ดวิธีการ:
ลองสิ่งนี้:
$var='snake_case';
echo ucword($var,'_');
เอาท์พุต:
Snake_Case remove _ with str_replace
ในการใช้ Laravel Str::camel()
use Illuminate\Support\Str;
$converted = Str::camel('foo_bar');
// fooBar
function camelCase($text) {
return array_reduce(
explode('-', strtolower($text)),
function ($carry, $value) {
$carry .= ucfirst($value);
return $carry;
},
'');
}
เห็นได้ชัดว่าถ้าตัวคั่นอื่นที่ไม่ใช่ '-' เช่น '_' จะจับคู่ด้วยก็จะไม่ได้ผลดังนั้น preg_replace สามารถแปลงตัวคั่นทั้งหมด (ต่อเนื่องกัน) เป็น '-' ใน $ text ก่อน ...
หากคุณใช้ Laravel framework คุณสามารถใช้แค่camel_case () method
camel_case('this-is-a-string') // 'thisIsAString'
นี่คืออีกทางเลือกหนึ่ง:
private function camelcase($input, $separator = '-')
{
$array = explode($separator, $input);
$parts = array_map('ucwords', $array);
return implode('', $parts);
}
$stringWithDash = 'Pending-Seller-Confirmation';
$camelize = str_replace('-', '', ucwords($stringWithDash, '-'));
echo $camelize;
เอาต์พุต: PendingSellerConfirmation
ucwords
พารามิเตอร์ที่สอง (ทางเลือก) ช่วยในการระบุตัวคั่นเพื่อปรับขนาดสตริง
str_replace
ใช้เพื่อสรุปผลลัพธ์โดยการลบตัวคั่น
นี่คือฟังก์ชันตัวช่วยขนาดเล็กโดยใช้วิธีarray_reduce ที่ใช้งานได้ ต้องการอย่างน้อย PHP 7.0
private function toCamelCase(string $stringToTransform, string $delimiter = '_'): string
{
return array_reduce(
explode($delimiter, $stringToTransform),
function ($carry, string $part): string {
return $carry === null ? $part: $carry . ucfirst($part);
}
);
}
วิธีแก้ปัญหาที่ดีมากมายข้างต้นและฉันสามารถให้วิธีอื่นที่ไม่มีใครพูดถึงมาก่อน ตัวอย่างนี้ใช้อาร์เรย์ ผมใช้วิธีนี้ในโครงการของฉันShieldon Firewall
/**
* Covert string with dashes into camel-case string.
*
* @param string $string A string with dashes.
*
* @return string
*/
function getCamelCase(string $string = '')
{
$str = explode('-', $string);
$str = implode('', array_map(function($word) {
return ucwords($word);
}, $str));
return $str;
}
ทดสอบ:
echo getCamelCase('This-is-example');
ผลลัพธ์:
ThisIsExample
private function dashesToCamelCase($string)
{
$explode = explode('-', $string);
$return = '';
foreach ($explode as $item) $return .= ucfirst($item);
return lcfirst($return);
}
ลองสิ่งนี้:
return preg_replace("/\-(.)/e", "strtoupper('\\1')", $string);
สิ่งนี้ง่ายกว่า:
$string = preg_replace( '/-(.?)/e',"strtoupper('$1')", strtolower( $string ) );
if (!$capitalizeFirstCharacter) { $str = lcfirst($str); }