Maison développement back-end tutoriel 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 />';
Copier après la connexion

  

为什么我要写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个方法是我想出来的,后面的正则抄袭可爱的网友们的,不过我也是挺佩服的,算是温习了一下正则。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Traitement d'horloge monotone du paquet de temps Traitement d'horloge monotone du paquet de temps Aug 04, 2023 pm 05:45 PM

Aujourd'hui, nous allons principalement examiner la méthode d'application du temps du package Golang Time. La règle générale entre les deux est que « l'heure murale » est utilisée pour indiquer l'heure et « l'horloge monotone » est utilisée pour mesurer le temps. Il existe d'autres méthodes de traitement d'horloge ;

Comment utiliser l'API Java8 Time Comment utiliser l'API Java8 Time Apr 28, 2023 pm 12:25 PM

1. Présentation Dans le cadre de cet article, commençons par quelques problèmes avec les API Date et Calendar existantes et explorons comment les nouvelles API Java8Date et Time résolvent ces problèmes. Nous examinerons également les classes principales de la bibliothèque de classes de temps Java8, telles que LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Period, Duration et leurs API. 2. Problèmes avec la sécurité des threads de l'ancienne API (avant Java 8) - les classes Date et Calendar ne sont pas thread-safe, ce qui rend difficile pour les développeurs de déboguer les problèmes de concurrence avec ces API et doivent écrire du code supplémentaire pour les gérer. .

Quelle est la différence et l'utilisation entre time et datetime en python Quelle est la différence et l'utilisation entre time et datetime en python May 02, 2023 am 11:01 AM

1. Deux façons de représenter l'heure en Python : timestamp : décalage en secondes par rapport à 1970.1.100:00:00, tuple temporel unique struct_time : un total de 9 éléments>tm_year : année 1-12> tm_mon : mois 1-12> tm_mday : jour 1-31>tm_hour : heure 0-23>tm_min : minute 0-59>tm_sec : seconde 0-59>tm_wday : semaine 0-6 (0 signifie dimanche)>tm_day : jour de l'année 1-366> tm_isdst : qu'il s'agisse de l'heure d'été, la valeur par défaut est -1.ti

Analyse du code source str de type Python intégré Analyse du code source str de type Python intégré May 09, 2023 pm 02:16 PM

1L'unité de base du stockage informatique Unicode est l'octet, composé de 8 bits. Étant donné que l'anglais ne comprend que 26 lettres et un certain nombre de symboles, les caractères anglais peuvent être stockés directement en octets. Mais d'autres langues (comme le chinois, le japonais, le coréen, etc.) doivent utiliser plusieurs octets pour le codage en raison du grand nombre de caractères. Avec la diffusion de la technologie informatique, la technologie de codage des caractères non latins continue de se développer, mais il existe encore deux limitations majeures : pas de support multilingue : le schéma de codage d'une langue ne peut pas être utilisé dans une autre langue et il n'existe pas de norme unifiée : par exemple, il existe de nombreuses normes d'encodage en chinois telles que GBK, GB2312, GB18030, etc. Étant donné que les méthodes d'encodage ne sont pas unifiées, les développeurs doivent effectuer des conversions entre différents encodages, et de nombreuses erreurs se produiront inévitablement.

Comment obtenir et convertir l'heure dans le module de temps Python Comment obtenir et convertir l'heure dans le module de temps Python May 13, 2023 pm 12:19 PM

Acquisition et conversion de l'heure du module Pythontime La bibliothèque Time de Python peut effectuer des traitements liés au temps, tels que l'accès à la date et à l'heure actuelles, la sortie de l'heure dans différents formats et l'attente d'une heure spécifiée. 1. Obtenez l'heure 1.1. Horodatage importtimetimestamp=time.time()#1682737552.5009851 Heure moyenne de Greenwich (GMT) Le nombre total de secondes entre 00:00:00 le 1er janvier 1970 et aujourd'hui 1.2. localtime()#time.struct_time(tm_year=2

Quelles sont les similitudes et les différences entre __str__ et __repr__ en Python ? Quelles sont les similitudes et les différences entre __str__ et __repr__ en Python ? Apr 29, 2023 pm 07:58 PM

Quelles sont les similitudes et les différences entre __str__ et __repr__ ? Nous connaissons tous la représentation des chaînes. La fonction intégrée repr() de Python peut exprimer des objets sous forme de chaînes pour faciliter notre identification. Il s'agit de la "représentation sous forme de chaîne". repr() obtient la représentation sous forme de chaîne d'un objet via la méthode spéciale __repr__. Si __repr__ n'est pas implémenté, lorsque nous imprimons une instance d'un vecteur sur la console, la chaîne résultante peut l'être. >>>classExample:pass>>>print(str(Example()))>>>

Comment résoudre l'erreur « undéfini : time.After » dans Golang ? Comment résoudre l'erreur « undéfini : time.After » dans Golang ? Jun 25, 2023 pm 05:28 PM

Golang est un langage de programmation très populaire. Ses fonctionnalités faciles à prendre en main, efficaces et rapides attirent de plus en plus de développeurs. Mais lors de l’utilisation, vous rencontrerez inévitablement quelques problèmes et erreurs. Par exemple, lorsque vous utilisez la méthode After dans le package time, vous pouvez rencontrer une erreur non définie : time.After. Cet article explique comment résoudre cette erreur. Comprendre la cause de l'erreur Dans Golang, si nous utilisons un nom de fonction non exporté ou incorrect

Utilisez la fonction PHP 'time' pour renvoyer l'horodatage UNIX actuel Utilisez la fonction PHP 'time' pour renvoyer l'horodatage UNIX actuel Jul 25, 2023 pm 04:42 PM

Utilisez la fonction PHP "time" pour renvoyer l'horodatage UNIX actuel. L'horodatage UNIX fait référence au nombre total de secondes depuis 0:00:00 le 1er janvier 1970, temps universel coordonné (UTC). En PHP, vous pouvez utiliser la fonction intégrée "time" pour obtenir l'horodatage UNIX actuel. Cet article explique comment utiliser cette fonction et fournit des exemples de code correspondants. Exemple de code : &lt;?php$timestamp=time();echo" current

See all articles