Cours par Webcam

Cours par Webcam

Formateur Web pour adultes depuis plus 11 ans, je vous propose des COURS collectifs par WEBCAM en LIVE pour booster vos connaissances et être autonome dans la création de site.

En savoir plus

PHP - Bases

PHP - Algorithmie

PHP - Chaîne

PHP - Tableau

PHP - Formulaires

PHP - Fonctions Usuelles

Données entres pages

Environnement et Interaction

PHP objet (POO)

Facebook
Twitter
LinkedIn

Affichages avec masques en PHP

En PHP, il est possible d’afficher ou de retourner du contenu et le formater en même temps. Par exemple on peut vouloir afficher le début d’une chaîne et cacher le reste avec des astérix (comme pour les numéros de transaction) HT********. Cela s’avère très pratique puisque qu’on évite la concaténation.

La fonction printf() permet d’afficher directement la chaîne formatée tandis que la fonction sprintf()permet de retourner une chaîne formatée (qui sera stockée en mémoire dans une variable).

Voici un exemple concrêt :

<?php
$recup = sprintf("%'*12s",'AB');
?>

Affichage

**********AB

Le premier paramètre de la fonction sprintf() représente le format, le deuxième paramètre est l’argument. Ici l’argument est la chaine AB.

Pour constituer une spécification de format, on commence par utiliser le caractère pourcentage % et on finit par un spécificateur de type qui correspond au type de valeur utiliser dans l’argument. Dans notre cas le spécificateur s signifie string.

% s

Le nombre 12 permet d’indiquer la taille minimum de l’argument : %12s signifie que la taille minimum de l’argument est de 12 caractères. Par défaut, le remplissage se fait avec des espaces.

%12s

Vous pouvez utiliser un remplisseur optionnel qui indique quel caractère sera utilisé pour compléter le résultat. Un autre caractère de remplissage peut être spécifié en le préfixant avec un guillemet simple (). Dans notre cas on utilise l’astérix ‘*’

%'*12s

Le format permet donc de remplir l’argument de type string avec des astérix jusqu’à 12 caractères : %’*12s

Vous pouvez utiliser aussi un spécificateur d’alignement qui indique si le résultat doit être aligné à gauche ou à droite. Par défaut, le résultat est aligné à droite. Le caractère moin  fera que le résultat sera justifié à gauche.

<?php
$recup = sprintf("%'*-12s",'AB');
?>

Affichage

AB**********

Échange d’arguments

Vous pouvez créer un format avec plusieurs spécifications, ce qui nécessitera plusieurs arguments.

<?php
$format = "Le prix du produit %s est de %d euros"; // format
$prix = 72; // argument pour la spécification du prix %d
$produit = "parfum"; // argument pour la spécification du produit %s
$recup = sprintf($format,$produit,$prix);
echo $recup;
?>

Affichage

Le prix du produit parfum est de 72 euros

Dans cet exemple, l’ordre des arguments est important par rapport au format, l’argument $produit doit précédé l’argument $prix. L’avantage de l’échange d’arguments est la réutilisation du même format mais avec des arguments qui peuvent être fournis dynamiquement.

<?php
$format = "Le prix du produit %s est de %d euros"; // format
$prix = 72; // argument pour la spécification du prix %d
$produit = "parfum"; // argument pour la spécification du produit %s
$recup = sprintf($format,$produit,$prix);
echo $recup;
$prix = 112;
$produit = "canapé";
$recup = sprintf($format,$produit,$prix);
echo $recup;
?>

Affichage

Le prix du produit parfum est de 72 euros
Le prix du produit canapé est de 112 euros

Modifier l’ordre des spécifications

Vous pouvez indiquer dans la chaîne de formatage l’ordre dans lequel les arguments doivent être utilisés en utilisant le spécificateur de position n$ pour chaque spécification. Le spécificateur de position n$ doit survenir immédiatement après le signe de pourcentage(%), avant tout autre spécificateur.

<?php
$format = ' %2$d euros est le prix du produit %1$s '; // format
$prix = 72; // argument pour la spécification du prix %d
$produit = "parfum"; // argument pour la spécification du produit %s
$recup = sprintf($format,$produit,$prix);
echo $recup;
?>

Affichage

72 euros est le prix du produit parfum

Dans cet exemple le traitement d’affichage de PHP (lignes de codes de 3 à 6) est resté intact.

Note : n’utiliser pas les guillemets  »  » mais les apostrophes ‘ ‘ pour délimiter la chaîne de format car le caractère $ risque d’être interprété comme une déclaration de variable.

Exploiter plusieurs fois les arguments

Si vous n’utilisez pas le spécificateur de position, vous serez obligé de répéter les arguments pour les utiliser plusieurs fois.

<?php
$format = "produit %s prix %d euros, produit %s prix %d euros "; // format
$prix = 72; // argument pour la spécification du prix %d
$produit = "parfum"; // argument pour la spécification du produit %s
$recup = sprintf($format,$produit,$prix,$produit,$prix);
echo $recup;
?>

Affichage

produit parfum prix 72 euros, produit parfum prix 72 euros

Les arguments sont répétés dans la fonctions sprintf() et dans l’ordre d’utilisation des spécifications.

Pour palier à cet inconvénient, vous pouvez recourir à nouveau aux spécificateurs de position.

<?php
$format = ' produit %1$s prix %2$d euros, produit %1$s prix %2$d euros '; // format
$prix = 72; // argument pour la spécification du prix %d
$produit = "parfum"; // argument pour la spécification du produit %s
$recup = sprintf($format,$produit,$prix);
echo $recup;
?>

Affichage

produit parfum prix 72 euros, produit parfum prix 72 euros

Vous remarquez que les arguments n’ont pas été répétés dans la fonction sprintf().

Passer plusieurs paramètres

Si vous devez faire passer un nombre important de paramètres à la fonction sprintf(), vous pouvez utiliser un tableau les contenant tous. Dans ce cas utilisez la fonction vprintf() ou vsprintf() qui sont similaires. La fonction vprintf() affiche directement le résultat tandis que vsprintf() retourne le résultat dans une variable.

<?php
$tab = array("HTML",5);
vprintf('%s %d-',$tab); // affiche directement HTML 5-
 
$recup = vsprintf('%s %d',$tab); // met le résultat en variable
echo $recup; // affiche la variable
?>

Affichage

HTML 5-HTML 5

Scanner une chaîne

Vous pouvez faire l’opération inverse et parcourir une chaîne pour récupérer les valeurs selon un masque défini. S’il existe plusieurs valeurs , un tableau sera retourné. Utilisez pour cela la fonction sscanf(). Si aucune valeur est trouvée, la valeur false sera retournée.

<?php
$chaine = "3 est un nombre";
$tab = sscanf($texte,'%d%s%d %s %d');
print_r($tab); // affiche la structure du tableau
?>

Affichage

Array ( [0] => 3 [1] => est [2] => un [3] => nombre )

Le deuxième paramètre de la fonction est le masque. Vous pouvez aussi lire le contenu d’un fichier avec la fonction fscanf() pour en extraire les valeurs.

A lire aussi

tutowebdesign

Afficher du contenu au scroll

Afficher du contenu au scroll Voici un effet impressionnant et pourtant très facile à mettre en place sur vos pages. Le principe consiste à faire

Lire »