首頁 後端開發 php教程 使用PHP把底線分隔命名的字串 轉換成駝峰式命名方式 , 把下劃線後面的第一個字母變成大寫

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

Aug 08, 2016 am 09:21 AM
float str

最近專案使用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.0039999485015869485015869485015869485015869485015869 500602722168

convertUnderline2: run time = 0.036003828048706


執行10w次:
convertUnderline1: run time = 0.46304702758789

convertUnderline2: run time = 0.31903195381165


為什麼字串截取拼接要比陣列連接慢呢?如果你看過PHP C的底層你就會明白了。所以以後如果有大量的字串需要連接成一個字串的 不要在用點連接了,放在一個數組後使用implode連接。

還有一個要說的,這樣的方法同樣在JS裡也是,數組連接要比字串連接塊。

以上就介紹了使用PHP把下劃線分隔命名的字符串 轉換成駝峰式命名方式 , 把下劃線後面的第一個字母變成大寫,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

float最大值為多少 float最大值為多少 Oct 11, 2023 pm 05:54 PM

float最大值為多少

資料庫float長度有哪些 資料庫float長度有哪些 Oct 10, 2023 pm 03:57 PM

資料庫float長度有哪些

float精度能到多少 float精度能到多少 Oct 17, 2023 pm 03:13 PM

float精度能到多少

c語言中float什麼意思 c語言中float什麼意思 Oct 12, 2023 pm 02:30 PM

c語言中float什麼意思

如何將string轉換成float 如何將string轉換成float Oct 16, 2023 pm 02:03 PM

如何將string轉換成float

float屬性取值有哪些 float屬性取值有哪些 Oct 10, 2023 pm 02:03 PM

float屬性取值有哪些

float和double有什麼差別 float和double有什麼差別 Oct 11, 2023 pm 05:38 PM

float和double有什麼差別

float32位元組包括哪些 float32位元組包括哪些 Oct 10, 2023 pm 04:07 PM

float32位元組包括哪些

See all articles