这道题描述起来也是十分地简单,就是把原先用 '-','_'隔开的字符串转为驼峰法,也就是单词紧贴在一起,且单词的首字母大写(除了第一个单词之外)。我的想法是,将字符串按照 '-','_' 分割成多个数组,再将一个个数组,也就是单词拼接起来,就是我们需要的了。
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));
}
看了大神的代码,真的是感觉太强了,还需要多多学习呀!
另外,如果你有兴趣,或者是有问题想要与我探讨,欢迎来访问我的博客:https:mu-mu.cn/blog