{"id":512,"date":"2020-05-05T14:57:06","date_gmt":"2020-05-05T13:57:06","guid":{"rendered":"https:\/\/bastienmalahieude.fr\/?p=512"},"modified":"2020-05-05T17:37:26","modified_gmt":"2020-05-05T16:37:26","slug":"php-premiere-lettre-des-mots-en-majuscule","status":"publish","type":"post","link":"https:\/\/bastienmalahieude.fr\/es\/php-premiere-lettre-des-mots-en-majuscule\/","title":{"rendered":"Mettre la premi\u00e8re lettre des mots en majuscule"},"content":{"rendered":"
Dans cet article nous allons voir comment mettre la premi\u00e8re lettre de tous les mots d’une phrase, ou d’un nom propre en majuscule. Cet article est le 3eme\u00a0<\/sup>de ma s\u00e9rie sur les fonctions php utiles. Vous pouvez retrouver les deux premiers ici : Importer un fichier CSV en PHP<\/a> et Exporter un tableau PHP en CSV<\/a>.<\/p>\n Nous allons donc transformer une cha\u00eene au format Jean-MARIE De la rue\u00a0<\/strong>en\u00a0Jean-Marie De La<\/strong> Rue<\/strong>.<\/p>\n Pour cela nous allons cr\u00e9er une fonction uc_first<\/em> qui prend en entr\u00e9e le nom de l’utilisateur et ressort une cha\u00eene de caract\u00e8re correctement format\u00e9e. Cette fonction prend deux param\u00e8tres, mais seul le 1er est obligatoire :<\/p>\n Dans un premier temps nous allons s\u00e9curiser que le param\u00e8tre n’est pas\u00a0null<\/em>. Cette \u00e9tape n’est pas obligatoire mais peut vous \u00e9viter des erreurs.<\/p>\n Ensuite, nous allons effectuer deux \u00e9tapes :<\/p>\n Nous allons donc cr\u00e9er le pattern de l’expression r\u00e9guli\u00e8re :<\/p>\n Ensuite, on r\u00e9cup\u00e8re dans un tableau tous les \u00e9l\u00e9ments d\u00e9coup\u00e9s en fonction des d\u00e9limiteurs :<\/p>\n Utiliser le flag PREG_SPLIT_DELIM_CAPTURE permet de qui permet de r\u00e9cup\u00e9rer dans notre tableau d\u00e9coup\u00e9, les d\u00e9limiteurs pass\u00e9s.<\/p>\n Enfin, sur chacun des \u00e9l\u00e9ments r\u00e9cup\u00e9r\u00e9s, on passe la cha\u00eene en minuscule avec\u00a0strtolower<\/em><\/a>, puis le 1er<\/sup> caract\u00e8re en majuscule avec\u00a0ucfirst<\/em><\/a>.<\/p>\n On utilise ici le caract\u00e8re &<\/em> dans notre boucle pour cr\u00e9er une r\u00e9f\u00e9rence avec l’\u00e9l\u00e9ment pr\u00e9sent dans le tableau $chunks<\/em>. Ce qui a pour cons\u00e9quence de modifier la valeur originale du tableau d\u00e8s lors que l’on modifie la valeur de $n<\/p>\n Enfin, la derni\u00e8re \u00e9tape consiste \u00e0 assembler \u00e0 nouveau tous les \u00e9l\u00e9ments puis retourner la cha\u00eene recr\u00e9\u00e9e :<\/p>\n La fonction finale que l\u2019on vient de cr\u00e9er est la suivante\u00a0:<\/p>\n\n
function uc_first($name)\r\n{\r\n\/\/ @TODO Do something here\r\n}<\/pre>\n
if(null === $name) {\r\n return $name;\r\n}<\/pre>\n
Description du processus<\/h3>\n
\n
$pattern = \"#([$delimiters])#\";<\/pre>\n
$chunks = preg_split($pattern, $name,-1, PREG_SPLIT_DELIM_CAPTURE);<\/pre>\n
Tout mettre en majuscule !<\/h3>\n
foreach ($chunks as &$n) {\r\n $n = ucfirst(strtolower($n));\r\n}<\/pre>\n
$name = implode('',$chunks);\r\n\r\nreturn $name;<\/pre>\n
FONCTION PHP COMPL\u00c8TE<\/h2>\n
\/**\r\n *\r\n * This function allows you to add a capitalize letter to every letter of a word.\r\n *\r\n * @Exemple : \"Jean-MARIE De la rue\" will become \"Jean-Marie De La Rue\"\r\n *\r\n * @param string|null $name\r\n * @param string $delimiters\r\n *\r\n * @return string|null\r\n *\/\r\nfunction uc_first($name,$delimiters = \" -\")\r\n{\r\n \/\/ Return null name is not defined\r\n if(null === $name) {\r\n return $name;\r\n }\r\n\r\n \/\/ Here we use \"-\" and \" \" as separators. You can add every separator you want\r\n $pattern = \"#([$delimiters])#\";\r\n\r\n \/\/ Explode the string linked according to the pattern\r\n $chunks = preg_split($pattern, $name,-1, PREG_SPLIT_DELIM_CAPTURE);\r\n\r\n \/\/ On every chunk, we first put everything lowercase then uppercase the 1st character\r\n foreach ($chunks as &$n) {\r\n $n = ucfirst(strtolower($n));\r\n }\r\n\r\n \/\/ We re-link everything together\r\n $name = implode('',$chunks);\r\n\r\n return $name;\r\n}<\/pre>\n