2011-12-25 108 views
4

例如:将连字符分隔字符串转换为camelCase?

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

回答

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

你可能想用$parts = explode('-', strtolower($string));,以防有人在连字符分隔字符串使用大写字符虽然以取代第一线。

1

如果可行,为什么不使用它?除非你解析了一大堆文字,否则你可能不会注意到它们之间的区别。

我看到的唯一的事情是,你的代码的第一个字母是会得到资本了,所以也许你可以补充一点:

foreach($parts as $k=>$part) 
    $new_string .= ($k == 0) ? strtolower($part) : ucfirst($part); 
2
$subject = 'abc-def-xyz'; 
$results = preg_replace_callback ('/-(.)/', create_function('$matches','return strtoupper($matches[1]);'), $subject); 

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

ucwords接受一个单词分隔为第二个参数,所以我们只需要传递一个连字符,然后小写第一个字母lcfirst,最后删除所有连字符str_replace