4

例如:

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

4 回答 4

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

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

于 2011-12-25T20:40:31.337 回答
2
$subject = 'abc-def-xyz';
$results = preg_replace_callback ('/-(.)/', create_function('$matches','return strtoupper($matches[1]);'), $subject);

echo $results;
于 2011-12-25T21:16:30.467 回答
1

如果这行得通,为什么不使用它呢?除非您正在解析大量文本,否则您可能不会注意到其中的差异。

我唯一看到的是,在您的代码中,第一个字母也将大写,所以也许您可以添加以下内容:

foreach($parts as $k=>$part)
  $new_string .= ($k == 0) ? strtolower($part) : ucfirst($part);
于 2011-12-25T20:41:02.097 回答
1
str_replace('-', '', lcfirst(ucwords('foo-bar-baz', '-'))); // fooBarBaz

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

于 2016-04-13T18:01:46.093 回答