字符串转驼峰式

这道题描述起来也是十分地简单,就是把原先用 ‘-‘,’_’隔开的字符串转为驼峰法,也就是单词紧贴在一起,且单词的首字母大写(除了第一个单词之外)。我的想法是,将字符串按照 ‘-‘,’_’ 分割成多个数组,再将一个个数组,也就是单词拼接起来,就是我们需要的了。

function toCamelCase($str){
  $str = str_replace('_','-',$str);
  $array = explode('-',$str);
  $newStr = $array[0];
  for($i=1;$i<count($array);$i++) {
    $newStr .= ucfirst($array[$i]);
  }
  return $newStr;
}

不过像这种对字符串的查找、替换等操作,用正则应该才是正解,接下来是大佬们的代码。

1、使用preg_replace_callback函数,第一个参数是正则表达式匹配到的字符,第二个参数是执行的回调函数,第三个参数是目标(字符串或者数组)。
使用正则匹配到 '-字母' 或者 '_字母' 的情况,然后所有的匹配位置都会以参数的形式传入到回调函数中,再执行回调函数,使首字母大写。
function toCamelCase($str){
  return preg_replace_callback("~[_-](\w)~", function($m) { return strtoupper($m[1]); }, $str);
}
function toCamelCase($str){
    $str = str_replace("-", "_",$str);
    //获取第一个'-'出现的位置
    $firstPos = strpos($str, "_");
    //substr截取第一个单词,str_replace替换字符,ucwords将单词首字母转大写,以第二个参数为分隔符
    return substr($str,0,$firstPos).str_replace("_", "",ucwords(substr($str,$firstPos), "_"));
}
//str_replace(['_','-'],' ',$str)
,把-和_都转化为空格,然后ucwords实现首字母大写,再substr(sting,1),从第二个字符开始获取字符串,再拼接上$str[0],最后删除空格,任务完成。这里有个细节是,不能直接substr(sting,0),这样子第一个单词首字母会大写,与题目要求不符合。
function toCamelCase( $str ){
  return 
    str_replace(' ','', $str[0].
      substr(
        ucwords(
          str_replace(['_','-'],' ',$str)
        ), 1
      )
    );
}

看了大神的代码,真的是感觉太强了,还需要多多学习呀!

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注