使用PHP把下划线分隔命名的字符串 转换成驼峰式命名方式 , 把下划线后面的第一个字母变成大写

最近项目使用symfony框架,这个框架对数据库的操作在这个团队里使用的是ORM进行操作,说实话使用ORM的开发效率和运行效率不一定高多少,到是它的实体命名和现有数据库字段的命名不太一样,ORM实体属性命名是驼峰式的,数据库字段是下划线分隔,这就产生了字段映射的过程。当碰到需要手动写实体必须的数组时,字段映射是一件很头疼的事情,尤其是字段比较多的时候,写到你想吐。到这就产生一个问题就是把以下划线分隔的命名字段转换成驼峰式命名。小弟我也很懒,在网上找了半天,也没找到一个具体的PHP Demo,有的也是java写的,还着还挺复杂。于是乎我就自己动手丰衣足食,顺手写了两个,废话不多说直接贴代码:

<?php
//微妙时间
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

//将下划线命名转换为驼峰式命名
function convertUnderline1 ( $str , $ucfirst = true)
{
    while(($pos = strpos($str , ‘_‘))!==false)
        $str = substr($str , 0 , $pos).ucfirst(substr($str , $pos+1));

    return $ucfirst ? ucfirst($str) : $str;
}

//将下划线命名转换为驼峰式命名
function convertUnderline2 ( $str , $ucfirst = true)
{
    $str = explode(‘_‘ , $str);
    foreach($str as $key=>$val)
        $str[$key] = ucfirst($val);

    if(!$ucfirst)
        $str[0] = strtolower($str[0]);

    return implode(‘‘ , $str);
}

//第一种方式调用10w次所需时间
$s1 = microtime_float();
for ($i=0;$i<1000;$i++)
{
    $str= ‘abcd_efgh_igk_lmn‘;
    convertUnderline1($str);
}
$e1 = microtime_float();
echo ‘convertUnderline1: run time = ‘;
echo $e1-$s1;echo ‘<br />‘;

//第二种方式调用10w次所需时间
$s2 = microtime_float();
for ($i=0;$i<1000;$i++)
{
    $str= ‘abcd_efgh_igk_lmn‘;
    convertUnderline2($str);
}
$e2 = microtime_float();
echo ‘convertUnderline2: run time = ‘;
echo $e2-$s2;

  

为什么我要写两个呢?两种不同的处理方式,我是想看看那个处理效率高。
经过测试发现,字符串拼接的方式要比用数组来处理慢了0.1秒,当然这是每个函数执行10w次才能看出的结果,当然1w次也能看出差别,1次就可以忽略不计了。
下面是测试结果:
执行1K次:
convertUnderline1: run time = 0.0050010681152344
convertUnderline2: run time = 0.0039999485015869

执行1w次:
convertUnderline1: run time = 0.05500602722168
convertUnderline2: run time = 0.036003828048706

执行10w次:
convertUnderline1: run time = 0.46304702758789
convertUnderline2: run time = 0.31903195381165

为什么字符串截取拼接要比数组连接慢呢?如果你看过PHP C的底层你就会明白了。所以以后如果有大量的字符串需要连接成一个字符串的 不要在用点连接了,放在一个数组后使用implode连接。

还有一个要说的,这样的方法同样在JS里也是,数组连接要比字符串连接块。

时间: 2024-10-10 22:59:00

使用PHP把下划线分隔命名的字符串 转换成驼峰式命名方式 , 把下划线后面的第一个字母变成大写的相关文章

写一个函数将传入的字符串转换成驼峰表示法

/* *已知有字符foo="get-element-by-id".写一个function将其转换成驼峰表示法"getElementById" */ var o = { trans:function (msg){ var i, tempArr = msg.split('-'), len = tempArr.length; for(i = 1; i < len; i++){ tempArr[i] = tempArr[i].charAt(0).toUpperCase

PHP把下划线分隔命名的字符串与驼峰式命名互转

最近项目使用symfony框架,这个框架对数据库的操作在这个团队里使用的是ORM进行操作,说实话使用ORM的开发效率和运行效率不一定高多少,到是它的实体命名和现有数据库字段的命名不太一样,ORM实体属性命名是驼峰式的,数据库字段是下划线分隔,这就产生了字段映射的过程.当碰到需要手动写实体必须的数组时,字段映射是一件很头疼的事情,尤其是字段比较多的时候,写到你想吐.到这就产生一个问题就是把以下划线分隔的命名字段转换成驼峰式命名.小弟我也很懒,在网上找了半天,也没找到一个具体的PHP Demo,有的

驼峰字符串转换成下划线样式

// 驼峰字符串转换成下划线样式 $str = 'openAPI'; echo $str."<BR>"; echo strtolower(preg_replace('/((?<=[a-z])(?=[A-Z]))/', '_', $str)).'<br>';//open_ap 正则表达式补充: ?: 不想被捕获的时候使用 可以提高程序执行速度 $string = 'April 15, 2003'; $pattern = '/(\w+) (\d+), (\d+

PHP面试题之驼峰字符串转换成下划线样式例子

自己在看到这个问题的时候,想到的是用ASCII码来处理,没往万能的正则上去想.好吧,下面来看看答案: 答案1: 代码如下 复制代码 $str = 'OpenAPI'; $length = mb_strlen($str); $new = ''; for($i = 0; $i < $length; $i++){ $num = ord($str[$i]); $pre = ord($str[$i - 1]); $new .= ($i != 0 && ($num >= 65 &&

(转) 三种编程命名规范(匈牙利命名法、驼峰式命名法、帕斯卡命名法)

三种编程命名规范(匈牙利命名法.驼峰式命名法.帕斯卡命名法) 1 . 匈牙利命名: 开头字母用变量类型的缩写,其余部分用变量的英文或英文的缩写,要求单词第一个字母大写. ex: int iMyAge; "i"是int类型的缩写: char cMyName[10]; "c"是char类型的缩写: float fManHeight; "f"是float类型的缩写: 其他: 前缀类型 a b by c cb cr cx,cy dw fn h i l l

三种编程命名规范(匈牙利命名法、驼峰式命名法、帕斯卡命名法)

1. 1 . 匈牙利命名: 开头字母用变量类型的缩写,其余部分用变量的英文或英文的缩写,要求单词第一个字母大写. ex: int iMyAge; "i"是int类型的缩写: char cMyName[10]; "c"是char类型的缩写: float fManHeight; "f"是float类型的缩写: 其他: 前缀类型 a b by c cb cr cx,cy dw fn h i l lp m_ n np p s sz w (一一对应关系) 

转载——三种编程命名规范(匈牙利命名法、驼峰式命名法、帕斯卡命名法)

1 . 匈牙利命名: 开头字母用变量类型的缩写,其余部分用变量的英文或英文的缩写,要求单词第一个字母大写. 比如: int iMyAge; "i"是int类型的缩写: char cMyName[10]; "c"是char类型的缩写: float fManHeight; "f"是float类型的缩写: 其他: 前缀类型 a b by c cb cr cx,cy dw fn h i l lp m_ n np p s sz w (一一对应关系) 数组

使用SQL如何把用逗号等字符隔开的字符串转换成列表(转)

如何把用逗号等字符隔开的字符串转换成列表,下面依逗号分隔符为例: 比如有一个字符串,其值为:香港,张家港,北京,上海用SQL把这个字符串转换成列表的方法是: 1.方法一 WITH A AS (SELECT '香港,张家港,北京,上海' A FROM DUAL) SELECT DECODE(B,0,SUBSTR(A,C),SUBSTR(A,C,B-C)) city FROM ( SELECT A,B,(LAG(B,1,0) OVER(ORDER BY LV))+1 C FROM( SELECT A

[原创]SQL表值函数:把用逗号分隔的字符串转换成表格数据

  我们日常开发过程中,非常常见的一种需求,把某一个用逗号或者/或者其他符号作为间隔的字符串分隔成一张表数据. 在前面我们介绍了 [原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式,当然按照这种方式转变一下也是可以实现的,但是我这里有以前我一直使用的另外一种方式,也记录一下吧. 依照惯例,我们首先来看看效果. 调用:SELECT Id FROM [Fn_StringSplitToTable]('1,12,36,65,58,56,DF',',') 具体函数如下: -- ==========