程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 使用PHP把下劃線分隔命名的字符串 轉換成駝峰式命名方式 , 把下劃線後面的第一個字母變成大寫,駝峰下劃線

使用PHP把下劃線分隔命名的字符串 轉換成駝峰式命名方式 , 把下劃線後面的第一個字母變成大寫,駝峰下劃線

編輯:關於PHP編程

使用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裡也是,數組連接要比字符串連接塊。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved