骆驼命名法转小写分隔

来源:互联网 发布:淘宝自动打款时间 编辑:程序博客网 时间:2024/05/20 04:11
/** * API相关工具类 * * @package service * @author lizengwang <lizengwang@gmail.com> * @version 0.1 2015-8-10 20:58:55 * @copyright (C) 2015 lizengwang <lizengwang@gmail.com> */class apiTools{    /**     * 统一API对完的输出转换,主要为 array('CourseName'=>'demo','Course_Num'=>12) 转换为 array('course_name' => 'demo','course_num'=>12)     * @param array $data 待转换数组     * @param array $exclude 排除列表,例如:array('Course_Num'=>'COURSENUM') ,上述数组会转换为 array('course_name' => 'demo','COURSENUM'=>12)     * @return array     */    public static function camelArray2LowerArray(array $data,array $exclude = array()) {        $result = array();        foreach ($data as $key=>$node) {            //如果存在特殊处理的key,直接替换            if (array_key_exists($key,$exclude) && !empty($exclude[$key])) {                is_array($node) ? $result[$exclude[$key]] = self::camelArray2LowerArray($node,$exclude) : $result[$exclude[$key]] = $node;            } else {                $new_key = self::camelCase2SplitLower($key);                is_array($node) ?  $result[$new_key] = self::camelArray2LowerArray($node,$exclude) : $result[$new_key] = $node;            }        }        return $result;    }    /**     * 分隔骆驼命名法,获取分隔后的小写字母,分隔符默认下划线     * @param $str 待转换字符串     * @param string $split_tag 分隔符     * @return string     */    private static function camelCase2SplitLower($str,$split_tag = '_')    {        $result = '';        $prev_code = 0;        $str = strval($str);        $str_length = strlen($str);        $split_tag_code = ord($split_tag);        for ($i = 0;$i<$str_length;$i++) {            $ascii_code = ord($str[$i]);            //如果是大写字母,转成小写字母,如果前一个字符为分隔符或者前一个字符为大写字母则不增加新的分隔符;            if ($ascii_code >= 65 && $ascii_code <= 90) {                if ($prev_code == 0                    || $prev_code == $split_tag_code                    ||($prev_code >= 65 && $prev_code <= 90)                ) {                    $result .= chr($ascii_code+32);                } else {                    $result .= $split_tag.chr($ascii_code+32);                }            } else {                $result .= $str[$i];            }            $prev_code = $ascii_code;        }        return $result;    }}
0 0
原创粉丝点击