在PHP中将Dashes转换为CamelCase

Kir*_*met 76 php string

有人可以帮我完成这个PHP功能吗?我想采用这样的字符串:'this-is-a-string'并将其转换为:'thisIsAString':

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


    return $string;
}
Run Code Online (Sandbox Code Playgroud)

web*_*ave 158

不需要正则表达式或回调.几乎所有的工作都可以用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');
Run Code Online (Sandbox Code Playgroud)

如果您使用PHP> = 5.3,则可以使用lcfirst而不是strtolower.

更新

这个第二个参数被添加到PHP 5.4.32/5.5.16中的ucwords中,这意味着我们不需要先将破折号更改为空格(感谢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');
Run Code Online (Sandbox Code Playgroud)

  • `if(!$ capitalizeFirstCharacter){$ str = lcfirst($ str); }` (15认同)
  • 请注意,`ucwords`实际上接受一个分隔符作为第二个参数(参见[由PeterM回答](http://stackoverflow.com/a/33122760/2580794)),因此不需要其中一个`str_replace`调用. (3认同)

Pet*_*erM 47

这可以通过使用接受分隔符作为参数的ucwords非常简单地完成:

function camelize($input, $separator = '_')
{
    return str_replace($separator, '', ucwords($input, $separator));
}
Run Code Online (Sandbox Code Playgroud)

注意:需要php至少5.4.32,5.5.16

  • 这将返回类似CamelCase的东西 - 如果你想让它像camelCase那样:`return str_replace($ separator,'',lcfirst(ucwords($ input,$ separator))); (26认同)

Ron*_*újo 14

在 Laravel 中使用Str::camel()

use Illuminate\Support\Str;

$converted = Str::camel('foo_bar');

// fooBar
Run Code Online (Sandbox Code Playgroud)


Pla*_*nox 7

这是我如何处理它的变化.这里我有两个函数,第一个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;
}
Run Code Online (Sandbox Code Playgroud)

让我们测试两个:

$camel = camelCase("James_LIKES-camelCase");
$uncamel = uncamelCase($camel);
echo $camel." ".$uncamel;
Run Code Online (Sandbox Code Playgroud)


dou*_*osh 6

单线超载,带有文档块...

/**
 * 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))));
}
Run Code Online (Sandbox Code Playgroud)

  • 在那儿放松一下,只是错过了回报。保持乐观。 (3认同)

Jer*_*ten 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]);
}
Run Code Online (Sandbox Code Playgroud)


Spa*_*kup 5

您正在寻找preg_replace_callback,您可以像这样使用它:

$camelCase = preg_replace_callback('/-(.?)/', function($matches) {
     return ucfirst($matches[1]);
}, $dashes);
Run Code Online (Sandbox Code Playgroud)