Convention camel

Eléphant du PHP | 66 Messages

25 mars 2008, 20:53

Bonjour,

Dans la série les petites fonctions bien pratiques, j'aimerais une fonction qui transforme une chaine contenant des underscore '_' en chaine formattée suivant la convention camel.

cette chaine

Code : Tout sélectionner

voici_un_exemple_plus_parlant
deviendrait

Code : Tout sélectionner

voiciUnExemplePlusParlant
Je cherche un truc simple et efficace si possible! :wink:

Merci!

Mammouth du PHP | 1511 Messages

25 mars 2008, 21:33

La c'est relativement simple comme problème ;)
Tu as une chaine, avec un caractére de séparation, jette un coup d'oeil a explode() ;)
Ensuite, tu as un tableau, tu vas donc faire une boucle et traiter ce tableau élément par élément.
Pour chaque element, tu vas prendre la première lettre et la remplacer par son equivalent majuscule substr(), str_replace() et strtoupper(), et tu vas recomposer la chaine avec implode()
Maintenant, a partir de ca, je te laisse cogiter ;)

Eléphant du PHP | 66 Messages

26 mars 2008, 11:07

Je connais mal les fonctions PHP, ce petit exercice était donc un bon entrainement!

Code : Tout sélectionner

function phpStyleToCamel($inString) { $explodeParts = explode('_', $inString); $finalString = $explodeParts[0]; array_shift($explodeParts); foreach ($explodeParts as $aPart) { $finalString = $finalString . strtoupper(substr($aPart, 0, 1)) . substr($aPart, 1); } return $finalString; }
Je n'ai pas trouvé l'intérêt pour implode et str_replace.

Merci pour le mini tuto! :P

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

26 mars 2008, 11:56

Pour mettre seulement la première lettre d'un mot en capitale : ucfirst()
Ca sera plus propre que ces substr et strtoupper à tout va ;)

Quant au implode(), l'idée était de momox était de changer la valeur directement dans le tableau généré et enstuite reconstruire la chaine, mais ta façon de procéder en concaténant les éléments au fur et à mesure est bonne également :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 259 Messages

26 mars 2008, 12:06

Hello,

Sinon, pour la culture vu que ta méthode fonctionne, tu as la solution preg_replace_callback(), qui est parfaitement adaptée à ce que tu veux faire.
$out = preg_replace_callback( '#(_\w)#' , create_function( '$m' , 'return strtoupper($m[0][1]);') , $str );
C'est intéressant de se pencher sur ces fonctions méconnues :)

Mammouth du PHP | 1511 Messages

26 mars 2008, 15:24

J'y avais pensé mais étant encore un peu nul en regex, j'ai laissé tombé cette idée ;)