【问题标题】:Convert hyphen delimited string to camelCase?将连字符分隔的字符串转换为驼峰式?
【发布时间】:2011-12-25 20:35:21
【问题描述】:
例如:
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
【问题讨论】:
标签:
php
string
camelcasing
【解决方案1】:
$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;
【解决方案3】:
如果可行,为什么不使用它?除非您正在解析大量文本,否则您可能不会注意到其中的差异。
我唯一看到的是,在您的代码中,第一个字母也会大写,所以也许您可以添加以下内容:
foreach($parts as $k=>$part)
$new_string .= ($k == 0) ? strtolower($part) : ucfirst($part);
【解决方案4】:
str_replace('-', '', lcfirst(ucwords('foo-bar-baz', '-'))); // fooBarBaz
ucwords 接受一个单词分隔符作为第二个参数,所以我们只需要传递一个连字符,然后用lcfirst 小写第一个字母,最后用str_replace 删除所有连字符。