Page 1 sur 1

Convention camel

Posté : 25 mars 2008, 20:53
par Flashball
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!

Posté : 25 mars 2008, 21:33
par momox
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 ;)

Posté : 26 mars 2008, 11:07
par Flashball
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

Posté : 26 mars 2008, 11:56
par Ryle
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 :)

Posté : 26 mars 2008, 12:06
par Jules Petibidon
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 :)

Posté : 26 mars 2008, 15:24
par momox
J'y avais pensé mais étant encore un peu nul en regex, j'ai laissé tombé cette idée ;)