将连字符分隔的字符串转换为驼峰式?

4
例如: abc-def-xyz 转为 abcDefXyz the-fooo 转为 theFooo 等等。
如何以最高效的方式使用PHP完成这个任务?
以下是我的建议:
$parts = explode('-', $string);
$new_string = '';

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

$new_string = lcfirst($new_string);

但我觉得这可以用更少的代码实现 :)

ps:祝大家节日快乐!! :D

4个回答

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

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


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

echo $results;

1

如果这个方法有效,为什么不使用呢?除非你要解析大量的文本,否则你可能不会注意到差异。

我唯一看到的问题是,使用你的代码后,第一个字母也会被大写,所以你可以添加以下内容:

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接