将连字符分隔的字符串转换为camelCase?

时间:2011-12-25 20:35:22

标签: php string camelcasing

例如:

abc-def-xyzabcDefXyz

the-foootheFooo

执行此PHP的最有效方法是什么?

这是我的看法:

$parts = explode('-', $string);
$new_string = '';

foreach($parts as $part)
  $new_string .= ucfirst($part);

$new_string = lcfirst($new_string);

但我觉得可以用更少的代码完成:)

ps:祝每个人节日快乐! :d

4 个答案:

答案 0 :(得分:8)

$parts = explode('-', $string);
$parts = array_map('ucfirst', $parts);
$string = lcfirst(implode('', $parts));

如果有人在连字符分隔的字符串中使用大写字符,您可能希望将第一行替换为$parts = explode('-', strtolower($string));

答案 1 :(得分:2)

$subject = 'abc-def-xyz';
$results = preg_replace_callback ('/-(.)/', create_function('$matches','return strtoupper($matches[1]);'), $subject);

echo $results;

答案 2 :(得分:1)

如果有效,为什么不使用它?除非您正在解析大量的文本,否则您可能不会注意到这些差异。

我唯一看到的是,使用你的代码,第一个字母也会被大写,所以也许你可以添加这个:

foreach($parts as $k=>$part)
  $new_string .= ($k == 0) ? strtolower($part) : ucfirst($part);

答案 3 :(得分:1)

str_replace('-', '', lcfirst(ucwords('foo-bar-baz', '-'))); // fooBarBaz

ucwords接受一个单词分隔符作为第二个参数,因此我们只需要传递一个连字符然后用lcfirst小写第一个字母,最后用str_replace删除所有连字符。< / p>