close

Exercice PHP 8 - TD Numéro 2

#1 Objectifs du TD open

Dans ce TD, on fait la même chose que dans le précédent TD, mais on n'utilisera pas json_decode().

  • Trouver les bonnes fonctions dans le manuel PHP pour traiter une chaîne. La chaîne est au format json, mais on la traitera comme une chaîne quelconque.
  • Parcourir un tableau.
  • Utiliser echo.
  • Utiliser la substitution de variable dans une chaîne.

#2 Sujet open

Je vous donne une chaîne de caractères $str. Cette chaîne contient les informations pour afficher 3 lignes de HTML dans un navigateur. Vous avez, pour chaque ligne, le nom de la balise HTML (* h1,h2,p), accompagnée de son contenu.

Je vous demande :

  1. De trouver les fonctions PHP qui permettent de récupérer les informations qui se trouvent dans la chaîne $str .
  2. De faire ce qu'il faut pour afficher le HTML dans le navigateur.
PHP8 - Sujet du TD numéro 2

Ci-dessous, vous avez le code d'une structure minimale HTML avec des balises PHP. Entre ces balises PHP, j'ai déclaré la chaîne $str. Dans ce TD je vous ai donné la chaîne sur une seule ligne. Le mieux, c'est de copier-coller ce code pour démarrer.

#3 Solution pas à pas open

  1. Observez comment est construite cette chaîne. C'est une chaîne ou le délimiteur est la simple quote. Ensuite, vous voyez une suite de couple "balise" : "contenu". Chaque couple est séparé par une virgule.
  2. Dans un premier temps, vous devez vous dire, que vous allez extraire les 3 couples "balise" : "contenu" en vous servant de la virgule, puisque c'est la virgule qui sépare ces informations.
  3. Donc, il faut trouver une fonction qui fait ça. Etant donné que, dans ce TD, vous ne pouvez pas utiliser les fonctions json, c'est logique que vous vous tourniez vers des fonctions de traitements des chaînes. Donc, vous tapez les mots clés php fonctions chaînes caractères sur Google. Là, vous choisissez la page de la documentation php officielle qui correspond à cette recherche php fonctions chaînes caractères.
  4. Alors là évidemment, il y a une centaine de fonctions, je reconnais que ce n'est pas évident. Déjà, faites le point sur ce que vous cherchez : "Vous cherchez une fonction qui coupe une chaîne suivant un caractère qui sert de séparateur". Là, soit on recommence et on cherche à nouveau avec un moteur de recherche, soit on parcourt "manuellement" cette liste afin de trouver la bonne fonction. Etant donné que l'on découvre, on va parcourir la liste, on part du haut, on descend, on tombe sur chunk_split qui scinde une chaîne. On va voir. Mais malheureusement, elle scinde une chaîne en morceaux de taille fixe. Ce n'est pas ce que l'on veut. On continue. On se repère au moyen du verbe qui commence la description : Convertit, Decode, Encode... puis on trouve un nouveau Scinde. Il s'agit de la fonction explode. La description est : Scinde une chaîne de caractères en segments. On va sur la page et là, on voit que c'est celle qui nous faut, notamment car on parle de séparateur (* notre virgule). En plus elle nous retourne un tableau.
    Résultat de l'exécution en PHP 8.2.1
    PHP8 - Solution pas à pas du TD numéro 2
  5. A ce stade, on voit que les accolades nous gênent. On aurait pu le voir avant et les enlever tout de suite. Ce n'est pas grave. On va chercher maintenant une fonction qui enlève un caractère d'une chaîne. Plus généralement on cherche une fonction qui extrait une sous chaîne d'une autre chaîne. Je cherche avec un moteur php fonction extraire sous chaîne d'une chaîne. Je trouve substr. Elle me convient. En fait, avec cette fonction, j'ai tout un tas de possibilités pour enlever des morceaux de chaînes. Je peux supprimer un morceau au début, à la fin, ou les deux. C'est intéressant qu'on la découvre, et c'est aussi pour ça que je la choisis. 😃.

    Résultat de l'exécution en PHP 8.2.1
    PHP8 - Solution pas à pas du TD numéro 2
  6. Maintenant, ce n'est pas trop difficile de voir que je vais pouvoir réutiliser explode. Le caractère deux points (* :) sera le séparateur.
    Résultat de l'exécution en PHP 8.2.1
    PHP8 - Solution pas à pas du TD numéro 2
  7. Il me reste à supprimer les espaces et les doubles quote. En effet, si je regarde les résultats du traitement précédent. Par exemple, si je regarde la chaîne ' "h1" '. En fait, c'est de la chaîne 'h1' dont j'ai besoin. Je dois enlever les espaces et les doubles quote en début et en fin de chaîne. Je peux faire ça avec substr. Je vais vous en montrer une autre. Je cherche php supprimer caractères en début et fin de chaîne. Je trouve substr mais aussi trim. Je vois qu'avec trim l'ordre des caractères n'intervient pas. Il s'agit d'une liste de caractères.
    Résultat de l'exécution en PHP 8.2.1
    PHP8 - Solution pas à pas du TD numéro 2
  8. C'est gagné 😤 ! Sauf que, je me rends compte, qu'il est possible de supprimer les accolades avec les trim qui sont déjà en place. Et du coup, je peux supprimer les deux appels à substr.

    Résultat de l'exécution en PHP 8.2.1
    PHP8 - Solution pas à pas du TD numéro 2

#4 Conclusion open

Il y a beaucoup de fonctions de traitements de chaînes de caractères. Ce n'est pas facile, mais soyez patient, car elles sont très riches et le plus souvent elles apportent la solution. Enfin, je vous signale que les expressions régulières, complètent la panoplie des possibilités de solutions lorsque l'on manipule des chaînes de caractères.