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

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

Jun 13, 2016 pm 12:22 PM
str time

使用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);}//将下划线命名转换为驼峰式命名function convertUnderline3 ( $str , $ucfirst = true){    $str = ucwords(str_replace('_', ' ', $str));    $str = str_replace(' ','',lcfirst($str));     return $ucfirst ? ucfirst($str) : $str;}//将下划线命名转换为驼峰式命名function convertUnderline4 ( $str , $ucfirst = true){    $str = preg_replace('/_([A-Za-z])/e',"strtoupper('$1')",$str);    return $ucfirst ? ucfirst($str) : $str;}//将下划线命名转换为驼峰式命名function convertUnderline5 ( $str , $ucfirst = true){    $str = preg_replace_callback('/([-_]+([a-z]{1}))/i',function($matches){        return strtoupper($matches[2]);    },$str);    return $ucfirst ? ucfirst($str) : $str;}$counts = 100000;//第1种方式调用10w次所需时间$s1 = microtime_float();for ($i=0;$i<$counts;$i++){    $str= 'abcd_efgh_igk_lmn';    convertUnderline1($str);}$e1 = microtime_float();echo 'convertUnderline1: run time = ';echo $e1-$s1;echo '<br />';//第2种方式调用10w次所需时间$s2 = microtime_float();for ($i=0;$i<$counts;$i++){    $str= 'abcd_efgh_igk_lmn';    convertUnderline2($str);}$e2 = microtime_float();echo 'convertUnderline2: run time = ';echo $e2-$s2;echo '<br />';//第3种方式调用10w次所需时间$s2 = microtime_float();for ($i=0;$i<$counts;$i++){    $str= 'abcd_efgh_igk_lmn';    convertUnderline3($str);}$e2 = microtime_float();echo 'convertUnderline3: run time = ';echo $e2-$s2;echo '<br />';//第4种方式调用10w次所需时间$s2 = microtime_float();for ($i=0;$i<$counts;$i++){    $str= 'abcd_efgh_igk_lmn';    convertUnderline4($str);}$e2 = microtime_float();echo 'convertUnderline4: run time = ';echo $e2-$s2;echo '<br />';//第5种方式调用10w次所需时间$s2 = microtime_float();for ($i=0;$i<$counts;$i++){    $str= 'abcd_efgh_igk_lmn';    convertUnderline4($str);}$e2 = microtime_float();echo 'convertUnderline5: run time = ';echo $e2-$s2;echo '<br />';
Salin selepas log masuk

  

为什么我要写5个呢?不同的处理方式,我是想看看那个处理效率高。
经过测试发现,效率由高到低为   方法3>方法2>方法1>方法4>方法5  当然这是每个函数执行10w次才能看出的结果,当然1w次也能看出差别,1次就可以忽略不计了。
下面是测试结果:

执行1K次:
convertUnderline1: run time = 0.005000114440918
convertUnderline2: run time = 0.0040009021759033
convertUnderline3: run time = 0.0039999485015869
convertUnderline4: run time = 0.014001131057739
convertUnderline5: run time = 0.01600193977356


执行1w次:
convertUnderline1: run time = 0.056005954742432
convertUnderline2: run time = 0.033003091812134
convertUnderline3: run time = 0.028002977371216
convertUnderline4: run time = 0.14401507377625
convertUnderline5: run time = 0.13701295852661


执行10w次:
convertUnderline1: run time = 0.44704508781433
convertUnderline2: run time = 0.32203197479248
convertUnderline3: run time = 0.2670259475708
convertUnderline4: run time = 1.3601360321045
convertUnderline5: run time = 1.3231329917908

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

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

前面3个方法是我想出来的,后面的正则抄袭可爱的网友们的,不过我也是挺佩服的,算是温习了一下正则。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Pemprosesan jam monotonik pakej masa Pemprosesan jam monotonik pakej masa Aug 04, 2023 pm 05:45 PM

Hari ini kita akan melihat kaedah penggunaan masa pakej masa golang. Peraturan umum antara kedua-duanya ialah "masa dinding" digunakan untuk memberitahu masa, dan "jam monotonik" digunakan untuk mengukur masa terdapat kaedah pemprosesan jam lain.

Cara menggunakan Java8 Time API Cara menggunakan Java8 Time API Apr 28, 2023 pm 12:25 PM

1. Gambaran Keseluruhan Sebagai sebahagian daripada artikel ini, mari kita mulakan dengan beberapa masalah dengan Date dan CalendarAPI sedia ada dan meneroka cara Java8Date dan TimeAPI baharu menyelesaikan masalah ini. Kami juga akan melihat kelas teras dalam perpustakaan kelas masa Java8, seperti LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Tempoh, Tempoh dan API mereka. 2. Masalah keselamatan benang API lama (sebelum Java 8)-Kelas Tarikh dan Kalendar tidak selamat untuk benang, menyukarkan pembangun untuk menyahpepijat masalah konkurensi API ini dan perlu menulis kod tambahan untuk menanganinya .

Apakah perbezaan dan penggunaan antara masa dan datetime dalam python Apakah perbezaan dan penggunaan antara masa dan datetime dalam python May 02, 2023 am 11:01 AM

1. Dua cara untuk mewakili masa dalam Python: cap waktu: offset dalam saat berbanding 1970.1.100:00:00, time tuple struct_time unik: sejumlah 9 elemen>tm_year: tahun 1-12> tm_mon: bulan 1-12> tm_mday: hari 1-31>tm_hour: jam 0-23>tm_min: minit 0-59>tm_sec: kedua 0-59>tm_wday: minggu 0-6 (0 bermaksud Ahad)>tm_day: Hari dalam tahun 1-366> tm_isdst: sama ada penjimatan siang hari, lalainya ialah -1.ti

Analisis kod sumber str jenis terbina dalam Python Analisis kod sumber str jenis terbina dalam Python May 09, 2023 pm 02:16 PM

1Unit asas storan komputer Unicode ialah bait, yang terdiri daripada 8 bit. Memandangkan bahasa Inggeris hanya terdiri daripada 26 huruf ditambah beberapa simbol, aksara Inggeris boleh disimpan terus dalam bait. Tetapi bahasa lain (seperti Cina, Jepun, Korea, dll.) perlu menggunakan berbilang bait untuk pengekodan kerana bilangan aksara yang banyak. Dengan penyebaran teknologi komputer, teknologi pengekodan aksara bukan Latin terus berkembang, tetapi masih terdapat dua batasan utama: tiada sokongan berbilang bahasa: skema pengekodan satu bahasa tidak boleh digunakan dalam bahasa lain dan tiada standard bersatu: contohnya Terdapat banyak piawaian pengekodan dalam bahasa Cina seperti GBK, GB2312, GB18030, dsb. Memandangkan kaedah pengekodan tidak bersatu, pembangun perlu menukar berulang-alik antara pengekodan yang berbeza, dan banyak ralat pasti akan berlaku.

Bagaimana untuk mendapatkan dan menukar masa dalam modul masa Python Bagaimana untuk mendapatkan dan menukar masa dalam modul masa Python May 13, 2023 pm 12:19 PM

Pemerolehan dan penukaran masa modul Pythontime Pustaka Masa Python boleh melakukan pemprosesan berkaitan masa, seperti mengakses tarikh dan masa semasa, mengeluarkan masa dalam format yang berbeza dan menunggu masa tertentu. 1. Dapatkan masa 1.1. Timestamp importtimestamp=time.time()#1682737552.5009851 Greenwich Mean Time (GMT) Jumlah bilangan saat dari 00:00:00 pada 1 Januari 1970 hingga 1.2 masa berstruktur masa sekarang. localtime()#time.struct_time(tm_year=2

Apakah persamaan dan perbezaan antara __str__ dan __repr__ dalam Python? Apakah persamaan dan perbezaan antara __str__ dan __repr__ dalam Python? Apr 29, 2023 pm 07:58 PM

Apakah persamaan dan perbezaan antara __str__ dan __repr__? Kita semua tahu perwakilan rentetan fungsi repr() boleh menyatakan objek dalam bentuk rentetan untuk memudahkan pengenalan kita. Ini ialah "perwakilan rentetan". repr() mendapatkan perwakilan rentetan objek melalui kaedah khas __repr__. Jika __repr__ tidak dilaksanakan, apabila kita mencetak contoh vektor ke konsol, rentetan yang terhasil mungkin. >>>classContoh:lulus>>>cetak(str(Contoh()))>>>

Bagaimana untuk menyelesaikan ralat 'undefined: time.After' dalam golang? Bagaimana untuk menyelesaikan ralat 'undefined: time.After' dalam golang? Jun 25, 2023 pm 05:28 PM

Golang ialah bahasa pengaturcaraan yang sangat popular. Ciri yang mudah dipelajari, cekap dan pantas menarik lebih ramai pembangun. Tetapi semasa penggunaan, anda pasti akan menghadapi beberapa masalah dan ralat. Contohnya, apabila menggunakan kaedah Selepas dalam pakej masa, anda mungkin menghadapi ralat undefined: time.After. Artikel ini akan memperkenalkan cara menyelesaikan ralat ini. Fahami punca ralat Di Golang, jika kami menggunakan nama fungsi yang tidak dieksport atau tidak betul

Gunakan fungsi PHP 'masa' untuk mengembalikan cap masa UNIX semasa Gunakan fungsi PHP 'masa' untuk mengembalikan cap masa UNIX semasa Jul 25, 2023 pm 04:42 PM

Gunakan fungsi PHP "masa" untuk mengembalikan cap masa UNIX semasa Cap masa UNIX merujuk kepada jumlah bilangan saat sejak 0:00:00 pada 1 Januari 1970 Coordinated Universal Time (UTC). Dalam PHP, anda boleh menggunakan fungsi terbina dalam "masa" untuk mendapatkan cap masa UNIX semasa. Artikel ini menerangkan cara menggunakan fungsi ini dan menyediakan contoh kod yang sepadan. Contoh kod: &lt;?php$timestamp=time();echo" semasa

See all articles