偶然遇到这个问题,感受有些意思,因而研究了一下。 php
下划线转驼峰比较简单,直接根据下划线打散成数组,每一个子项首字符转大写,再作字符串拼接便可。 正则表达式
驼峰转下划线风格,稍微复杂一些。刚开始我没有思路,后来想到,能够遍历字符串,遇到大写字母将其转换成小写,并在前面加一个下划线。 数组
最终实现: 测试
class CamelTool{ //驼峰命名法转下划线风格 public static function toUnderScore($str){ $array = array(); for($i=0;$i<strlen($str);$i++){ if($str[$i] == strtolower($str[$i])){ $array[] = $str[$i]; }else{ if($i>0){ $array[] = '_'; } $array[] = strtolower($str[$i]); } } $result = implode('',$array); return $result; } //下划线风格转驼峰命名法 public static function toCamelCase($str){ $array = explode('_', $str); $result = ''; foreach($array as $value){ $result.= ucfirst($value); } return $result; } }
遍历字符串,用到的很少,但PHP提供了这个强大的特性: code
for($i=0; $i< strlen($str);$i++){ echo $str[$i]; }
咱们能够像遍历数组同样来操做字符串的每个字符。 字符串
如何检测一个字母是大写?刚开始我准备用正则表达式,但很快想到更简单的方式: io
$str != strtolower($str);
若是该条件成立,$str 必定是大写字母。 function
测试代码是否正确运行: class
$str = 'user_point_log'; $result = CamelTool::toCamelCase($str); //输出 UserPointLog echo $result; echo '<br/>'; $str = 'UserPointLog'; $result = CamelTool::toUnderScore($str); //输出 user_point_log echo $result;