将一个驼峰式的字符串转化为在大写字母前用某种字符填充并将大写字母变成小写

        在进行thinkphp开发的时候,有一种开发思想就是:

一个控制器对应一个数据表的管理,控制器的命名采用驼峰式命名,

数据表采用每个单词之间下划线连接 。

举个例子:有一个客户类型表,命名为:customer_type,

                 然后在建立控制器时,命名:CustomerType

        然后就可以在继承的父类中,检测当前控制器对应的模型(数据表),当没有传进参数时,

默认对应的是当前的控制器的名称。这样在模型新增和编辑的时候,可以带来简便。

这种方法有一个坏处就是,没有对应的函数将控制器转换未我们需要的数据表名。

所以本人自己设计了一个,代码如下:


/**
 * 将一个字符串装换为数据表的名称
 * 要求:
 *      1.字符串符合驼峰命名规则(或形式如下:aaBb => aa_ab, AaBb=> aa_bb)
 *      2.数据库的书库表命名方式如下:aa_bb
 * @param $str 需要转换的字符串 默认为当前的控制器名
 * @param $delimiter 在大写字符转化为小写的之前前一个位置用该字符填充,默认下划线
 * @return $str 转换之后的字符串
 */
function str_to_tableName($str='', $delimiter = '_'){
    $str = $str ? $str : \think\Request::instance()->controller();
    do{
        $pos = preg_match('/([A-Z])/', $str, $matches);
        if($pos === 0) break;
        $strs = explode($matches[0], $str, 2);
        $str = ($strs[0] ? $strs[0].$delimiter : '').strtolower($matches[0]).$strs[1];
    }while(1);
    return $str;
}


代码和逻辑并不复杂,看代码就可以懂。

        不过尴尬的是:本人突然想到,既然只是匹配,可以将控制器转化未表名,那反过来,也可以将表名转话为控制器的名啊~~~
真的是悲催~~~不知到哪一种更加简便~。以后测试之后,再来分享,也希望有大神可以指导一下。非常感谢!

posted @ 2017-11-05 09:01  gxkx  阅读(1009)  评论(2编辑  收藏  举报