Volver a Artículos

Dans cet article nous allons voir comment mettre la première lettre de tous les mots d’une phrase, ou d’un nom propre en majuscule. Cet article est le 3eme de ma série sur les fonctions php utiles. Vous pouvez retrouver les deux premiers ici : Importer un fichier CSV en PHP et Exporter un tableau PHP en CSV.

Nous allons donc transformer une chaîne au format Jean-MARIE De la rue en Jean-Marie De La Rue.

Pour cela nous allons créer une fonction uc_first qui prend en entrée le nom de l’utilisateur et ressort une chaîne de caractère correctement formatée. Cette fonction prend deux paramètres, mais seul le 1er est obligatoire :

 function uc_first($name)
{
// @TODO Do something here
}

Dans un premier temps nous allons sécuriser que le paramètre n’est pas null. Cette étape n’est pas obligatoire mais peut vous éviter des erreurs.

if(null === $name) {
    return $name;
}

Description du processus

Ensuite, nous allons effectuer deux étapes :

Nous allons donc créer le pattern de l’expression régulière :

$pattern = "#([$delimiters])#";

Ensuite, on récupère dans un tableau tous les éléments découpés en fonction des délimiteurs :

$chunks = preg_split($pattern, $name,-1, PREG_SPLIT_DELIM_CAPTURE);

Utiliser le flag PREG_SPLIT_DELIM_CAPTURE permet de qui permet de récupérer dans notre tableau découpé, les délimiteurs passés.

Tout mettre en majuscule !

Enfin, sur chacun des éléments récupérés, on passe la chaîne en minuscule avec strtolower, puis le 1er caractère en majuscule avec ucfirst.

foreach ($chunks as &$n) {
    $n = ucfirst(strtolower($n));
}

On utilise ici le caractère & dans notre boucle pour créer une référence avec l’élément présent dans le tableau $chunks. Ce qui a pour conséquence de modifier la valeur originale du tableau dès lors que l’on modifie la valeur de $n

Enfin, la dernière étape consiste à assembler à nouveau tous les éléments puis retourner la chaîne recréée :

$name = implode('',$chunks);

return $name;

FONCTION PHP COMPLÈTE

La fonction finale que l’on vient de créer est la suivante :

/**
 *
 * This function allows you to add a capitalize letter to every letter of a word.
 *
 * @Exemple : "Jean-MARIE De la rue" will become "Jean-Marie De La Rue"
 *
 * @param string|null $name
 * @param string $delimiters
 *
 * @return string|null
 */
function uc_first($name,$delimiters = " -")
{
    // Return null name is not defined
    if(null === $name) {
        return $name;
    }

    // Here we use "-" and " " as separators. You can add every separator you want
    $pattern = "#([$delimiters])#";

    // Explode the string linked according to the pattern
    $chunks = preg_split($pattern, $name,-1, PREG_SPLIT_DELIM_CAPTURE);

    // On every chunk, we first put everything lowercase then uppercase the 1st character
    foreach ($chunks as &$n) {
        $n = ucfirst(strtolower($n));
    }

    // We re-link everything together
    $name = implode('',$chunks);

    return $name;
}

Le code est disponible sur github dans le repository xusifob/lib

N’hésitez pas à laisser votre avis dans les commentaires ci-dessous !

Comparte este artículo