将snake_case替换为字符串的一部分中的CamelCase

时间:2016-08-02 17:03:46

标签: php

我有一个看起来像这样的uri:

/Albums/album_id/Photos/photo_id/tags

我想将album_idphoto_id替换为AlbumIdPhotoId。我该如何做到这一点?

9 个答案:

答案 0 :(得分:2)

也可以试试这个:

$str = "/Albums/album_id/Photos/photo_id/tags";
$str = str_replace("_", "", ucwords($str, " /_"));

ucwords的引用(尽管其中一些php在线测试人员说明了其他情况,但确实允许第二个参数...)

答案 1 :(得分:1)

我最终使用了以下内容:

str_replace(' ', '', ucwords(str_replace('_', ' ', str_replace('/', '/ ', $uri))));

<强>解释

使用/时,前缀foo_bar不允许FooBar成为ucwords(str_replace('_', '', $uri))

相反,首先用/替换/(即在斜杠后添加一个空格),最后删除所有空格。

答案 2 :(得分:1)

这是另一个单行:

echo implode('', array_map('ucfirst', explode('_', $string)));

答案 3 :(得分:0)

2个步骤:

  1. _之后的每个字母都应该大写。
  2. _应该删除
  3. <强>实施

    让我们将字符串作为char数组:

    $a = "/Albums/album_id/Photos/photo_id/tags"
    $b = str_split($a)
    

    现在,跟随_的每个字符都应该大写:

    for ($i = 1; $i < count($b); $i++) {
        if ($b[i - 1] == '_') {
            $b[i] = strtoupper($b[i]);
        }
    }
    

    现在,再次将其作为字符串:

    $c = implode("", $b);
    

    删除_ s

    e = str_replace("_", "", $c);
    

    和完整版:

    function doThat($t) {
      $b = str_split($t)
      for ($i = 1; $i < count($b); $i++) {
        if ($b[i - 1] == '_') {
          $b[i] = strtoupper($b[i]);
        }
      }
      return str_replace("_", "", implode("", $b));
    }
    

答案 4 :(得分:0)

$out = str_replace(
    ['photo_id', 'album_id']
    ['PhotoId', 'AlbumId'],
    $in
);

答案 5 :(得分:0)

您可以检查此代码:

$str = "/Albums/album_id/Photos/photo_id/tags";

$split_str = split("_", $str);

$new_str = $split_str[0];

for ($i = 1; $i < count($split_str); $i++)
{
    $new_str .= ucfirst($split_str[$i]);
}

echo $new_str;  

Here you can test it.

答案 6 :(得分:0)

也许这有帮助:

<?php
function convert($string){
  $sections = explode('/',$string);
  $url = '';
  foreach ($sections as $section){
  $words = explode('_',$section);
    if(count($words) > 1){
      foreach ($words as $word){
        $word = ucfirst($word);
        $url .= $word;
      }
    } else {
      $url .= $words[0];
    }
  $url .= '/';
  }
  return $url;
}
$url = convert("/Albums/album_id/Photos/photo_id/tags");
echo $url;
?>

这使得单个小写单词保持不变,并且仅为ab_cd之类的部分大写并删除短划线。最后有一个斜线,如果你愿意,你可以简单地摆脱它。

答案 7 :(得分:0)

您可以通过拨打preg_replace_callback功能来执行此操作:

$string = '/Albums/album_id/Photos/photo_id/tags';

echo preg_replace_callback(
    '/_(.)/',
    function($match) {
        return strtoupper($match[1]);
    },
    $string);

奇怪的/_(.)/笑脸实际上是正则表达式,它匹配_之后的任何字符。 (.) any character被分隔为自己的组,因此我们可以在回调函数中的匹配数组中使用它。

在第一次正则表达式匹配时,$match成为一个数组,其中包含0 => _i, 1 => i,因此您可以在回调函数中安全地使用$match[1]

回调函数本身只返回转换为大写的字符串。

以上示例的输出为/Albums/albumId/Photos/photoId/tags

答案 8 :(得分:0)

我测试了这个,它为那个和其他类似的字符串做了诀窍: 它会将 /相册/ album_id / Photos / photo_id / tags 转换为 /相册/相册ID /相片/相片/标签

$ str =&#34; /相册/ album_id /相片/ photo_id / tags&#34;;

    $split_str = explode("/", $str);

    $result = '';
    for ($i = 0; $i < count($split_str); $i++)
    {
        $sub_result = $split_str[$i];
        if(strpos($split_str[$i], "_") !== false) {

            $segments = explode("_", $split_str[$i]);
            $sub_result = '';
            for ($j = 0; $j < count($segments); $j++) {
                $sub_result .= ucfirst($segments[$j]);
            }
        }
        if(strlen($sub_result)) { // This will remove the empty string generated by the first part of the url
            $result .= "/" . $sub_result;
        }
    }

    echo $result;