ড্যাশকে পিএইচপি-তে ক্যামেলকেসে রূপান্তর করুন


91

কেউ এই পিএইচপি ফাংশনটি সম্পূর্ণ করতে আমাকে সহায়তা করতে পারেন? আমি এর মতো একটি স্ট্রিং নিতে চাই: 'এই-ই-এ-স্ট্রিং' এবং এটিকে রূপান্তর করুন: 'এইআইএসএএসটিং':

function dashesToCamelCase($string, $capitalizeFirstCharacter = false) {
    // Do stuff


    return $string;
}

উত্তর:


185

কোনও রেইজেক্স বা কলব্যাকের প্রয়োজন নেই। প্রায় সমস্ত কাজ ইউকওয়ার্ড দিয়ে করা যেতে পারে:

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');

আপনি যদি পিএইচপি> = 5.3 ব্যবহার করেন তবে আপনি স্ট্র্টলওয়ারের পরিবর্তে lcfirst ব্যবহার করতে পারেন।

হালনাগাদ

পিএইচপি 5.4.32 / 5.5.16 এ ইউক্যাওয়ার্ডগুলিতে একটি দ্বিতীয় প্যারামিটার যুক্ত করা হয়েছিল যার অর্থ আমাদের প্রথমে ড্যাশগুলি স্পেসে পরিবর্তন করার দরকার নেই (এটি দেখানোর জন্য লার্স এবার্ট এবং পিটারমকে ধন্যবাদ)। আপডেট হওয়া কোডটি এখানে:

function dashesToCamelCase($string, $capitalizeFirstCharacter = false) 
{

    $str = str_replace('-', '', ucwords($string, '-'));

    if (!$capitalizeFirstCharacter) {
        $str = lcfirst($str);
    }

    return $str;
}

echo dashesToCamelCase('this-is-a-string');

18
if (!$capitalizeFirstCharacter) { $str = lcfirst($str); }
এভিপ্রোগ্রামার

4
নোট করুন যে ucwordsপ্রকৃতপক্ষে একটি ডেলিমিটারকে দ্বিতীয় প্যারামিটার হিসাবে গ্রহণ করে ( পিটারএমের উত্তর দেখুন ), সুতরাং str_replaceকলগুলির মধ্যে একটি অপ্রয়োজনীয় হবে।
লার্স এবার্ট

@ লার্সবার্ট তথ্যের জন্য ধন্যবাদ। আমি উত্তর আপডেট করেছি।
ওয়েববিডেভ

শর্তটি $str = ! $capitalizeFirstCharacter ? lcfirst($str) : $str;মূলত পঠনযোগ্যতার জন্য (যদিও কিছু একমত হতে পারে না) এবং / অথবা কোডের জটিলতা হ্রাস করার জন্য টেরিনারি অপারেটরের ব্যবহারের সাথে আবারও লেখা যেতে পারে ।
ক্রিস অথানসিয়াদিস

55

এটি ইউকওয়ার্ড ব্যবহার করে খুব সহজেই করা যেতে পারে যা ডেলিমিটারকে পরম হিসাবে গ্রহণ করে:

function camelize($input, $separator = '_')
{
    return str_replace($separator, '', ucwords($input, $separator));
}

দ্রষ্টব্য: পিএইচপি দরকার কমপক্ষে 5.4.32, 5.5.16


33
এটি ক্যামেলকেসের মতো কিছু ফিরিয়ে দেবে - আপনি যদি এটির জন্য উটকেসের মতো কিছু হতে চান তবে:return str_replace($separator, '', lcfirst(ucwords($input, $separator)));
জেফ এস

ucwordsএকটি দ্বিতীয় প্যারামিটার আছে delimiter, তাই str_replace("_", "", ucwords($input, "_"));যথেষ্ট ভাল (বেশিরভাগ ক্ষেত্রে,: P
wbswjc

8

এটি কীভাবে মোকাবেলা করতে হবে তা সম্পর্কে আমার পার্থক্য। এখানে আমার দুটি ফাংশন রয়েছে, প্রথমে একটি উটকেস যে কোনও কিছুকে একটি উটকেসে রূপান্তরিত করে এবং ভেরিয়েবলের মধ্যে ইতিমধ্যে ক্যাসকেস থাকলে তা গণ্ডগোল হবে না। দ্বিতীয় আনমেলকেসটি উট কেসকে আন্ডারস্কোরে রূপান্তরিত করে (ডাটাবেস কীগুলির সাথে কাজ করার সময় দুর্দান্ত বৈশিষ্ট্য)।

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;

এই ফাংশনটি জেমস লাইকস ক্যামের পরিবর্তে জেমস লাইকসকেস-এর পরিবর্তে উট কেসের জন্য ফিরে আসে
আলারি ট্রুটস

8

ওভারলোডেড ওয়ান-লাইনার, ডক ব্লক সহ ...

/**
 * 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
ডাবলজোশ

6
সেখানে খুব সহজেই বাডি, রিটার্নটি মিস করলেন। তাই ইতিবাচক থাকুন।
ডাবলজোশ

5

আমি সম্ভবত এটি ব্যবহার করব 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]);
}


4
function camelize($input, $separator = '_')
{
    return lcfirst(str_replace($separator, '', ucwords($input, $separator)));
}

echo ($this->camelize('someWeir-d-string'));
// output: 'someWeirdString';

3
$string = explode( "-", $string );
$first = true;
foreach( $string as &$v ) {
    if( $first ) {
        $first = false;
        continue;
    }
    $v = ucfirst( $v );
}
return implode( "", $string );

নিরীক্ষিত কোড Im- / বিস্ফোরণ এবং ucfirst ফাংশনগুলির জন্য পিএইচপি ডক্স পরীক্ষা করুন।


3

একটি লাইনার, পিএইচপি> = 5.3:

$camelCase = lcfirst(join(array_map('ucfirst', explode('-', $url))));

4
দয়া করে কিছু ব্যাখ্যা যুক্ত করুন কীভাবে এটি ওপিকে সহায়তা করতে পারে
দ্যাভজাল

2

এখানে একটি লাইন কোডে খুব খুব সহজ সমাধান

    $string='this-is-a-string' ;

   echo   str_replace('-', '', ucwords($string, "-"));

আউটপুট এইআইএসএএসআরটিং


1

বিকল্পভাবে, আপনি যদি রেজেক্সের সাথে ডিল করতে পছন্দ না করেন এবং সুস্পষ্ট লুপগুলি এড়াতে চান :

// $key = 'some-text', after transformation someText            
$key = lcfirst(implode('', array_map(function ($key) {
    return ucfirst($key);
}, explode('-', $key))));

1

আর একটি সহজ পদ্ধতি:

$nasty = [' ', '-', '"', "'"]; // array of nasty characted to be removed
$cameled = lcfirst(str_replace($nasty, '', ucwords($string)));

1

টার্বোকমন্স লাইব্রেরিতে স্ট্রিংউটিলস শ্রেণীর অভ্যন্তরে একটি সাধারণ উদ্দেশ্য বিন্যাসের ক্যাস () পদ্ধতি রয়েছে, যা আপনাকে স্ট্রিংকে প্রচুর সাধারণ কেস ফর্ম্যাটগুলিতে রূপান্তর করতে দেয় যেমন ক্যামেলকেস, আপারকামেলকেস, লোয়ারকামেলকেস, স্নাপকেস, শিরোনাম কেস এবং আরও অনেক কিছুতে।

https://github.com/edertone/TurboCommons

এটি ব্যবহার করতে, আপনার প্রকল্পে ফার ফাইলটি আমদানি করুন এবং:

use org\turbocommons\src\main\php\utils\StringUtils;

echo StringUtils::formatCase('sNake_Case', StringUtils::FORMAT_CAMEL_CASE);

// will output 'sNakeCase'

পদ্ধতি উত্স কোডের লিঙ্কটি এখানে:

https://github.com/edertone/TurboCommons/blob/b2e015cf89c8dbe372a5f5515e7d9763f45eba76/TurboCommons-Php/src/main/php/utils/StringUtils.php#L653


1

এটা চেষ্টা কর:

$var='snake_case';
echo ucword($var,'_');

আউটপুট:

Snake_Case remove _ with str_replace


0
function camelCase($text) {
    return array_reduce(
         explode('-', strtolower($text)),
         function ($carry, $value) {
             $carry .= ucfirst($value);
             return $carry;
         },
         '');
}

স্পষ্টতই, যদি '-', যেমন '_' এর চেয়ে অন্য সীমানারটিও খুব মিলে যায়, তবে এটি কাজ করবে না, তবে পূর্ববর্তী স্থানটি প্রথমে) পাঠ্যে সমস্ত (ধারাবাহিক) ডিলিমিটারগুলিকে রূপান্তর করতে পারে ...


আমি প্রায় 4 বছর আগে প্রদত্ত সমাধানের (এবং স্বীকৃত) সমাধানের তুলনায় এটি কীভাবে সহজ, পরিষ্কার বা কোনওভাবে ভাল তা সত্যিই দেখছি না।
ccjmne

0

এই ফাংশনটি @ সেন্সের ফাংশনের অনুরূপ

function toCamelCase($str, $first_letter = false) {
    $arr = explode('-', $str);
    foreach ($arr as $key => $value) {
        $cond = $key > 0 || $first_letter;
        $arr[$key] = $cond ? ucfirst($value) : $value;
    }
    return implode('', $arr);
}

তবে পরিষ্কার, (আমি মনে করি: ডি) এবং প্রথম অক্ষরকে মূলধন করতে toচ্ছিক প্যারামিটার সহ।

ব্যবহার:

$dashes = 'function-test-camel-case';
$ex1 = toCamelCase($dashes);
$ex2 = toCamelCase($dashes, true);

var_dump($ex1);
//string(21) "functionTestCamelCase"
var_dump($ex2);
//string(21) "FunctionTestCamelCase"



0

$stringWithDash = 'Pending-Seller-Confirmation'; $camelize = str_replace('-', '', ucwords($stringWithDash, '-')); echo $camelize; আউটপুট: মুলতুবি বিক্রয়কারী কনফার্মেশন

ucwordsদ্বিতীয় (alচ্ছিক) প্যারামিটারটি স্ট্রিংকে উঁচু করতে একটি বিভাজক সনাক্ত করতে সহায়তা করে। str_replaceবিভাজক অপসারণ করে আউটপুট চূড়ান্ত করতে ব্যবহৃত হয়।


0

কার্যকরী অ্যারে_ড্রেস পদ্ধতির ব্যবহার করে এখানে একটি ছোট সহায়ক ফাংশন । কমপক্ষে পিএইচপি 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);
        }
    );
}

0

উপরে অনেকগুলি ভাল সমাধান, এবং আমি আলাদাভাবে সরবরাহ করতে পারি যার আগে কেউ উল্লেখ করেনি mention এই উদাহরণ অ্যারে ব্যবহার করে। আমি আমার প্রকল্প শিল্ডন ফায়ারওয়ালে এই পদ্ধতিটি ব্যবহার করি ।

/**
 * 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


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.