IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Tableaux, foreach et remplacements


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mai 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Mai 2022
    Messages : 6
    Par défaut Tableaux, foreach et remplacements
    Bonjour.

    Je suis en train d'essayer de mettre en place un script pour remplacer dans un texte, un contenu entre {} par une série d'images.
    En gros: bla bla bla {Jean, Pierre, Paul, Jean Jacques, Martin} Blabla
    doit remplacer Jean, Pierre, Paul, Jean Jacques, Martin par des images

    La partie de script pour générer les images je suis OK Mon souci est que si dans ma liste j'ai des noms composés, ça plante

    En gros:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $liste  = "Jean, Pierre, Paul, Jean Jacques, Martin";
    $tableau = explode(',', $liste);
     
    $number = 0;
     
    foreach ( $tableau as $monMtableau ) {
    $number++;
    $liste = str_replace($monMtableau,'Nombre = '.$number.'<br />',$liste);
    }
    Quand je echo $liste;
    ça donne:

    Nombre = 1
    Nombre = 2
    Nombre = 3
    Nombre = 1 Jacques
    Nombre = 5

    Comment faire pour que ça renvoie
    Nombre = 1
    Nombre = 2
    Nombre = 3
    Nombre = 4
    Nombre = 5

  2. #2
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 346
    Par défaut
    si vous rajouter un explode dans la boucle (explode(" ", $montableau)) ça devrait le faire.

  3. #3
    Membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mai 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Mai 2022
    Messages : 6
    Par défaut
    Bonjour licardentaistor

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $liste  = "Jean, Pierre, Paul, Jean Jacques, Martin";
    $tableau = explode(',', $liste);
     
    $number = 0;
     
    foreach ( $tableau as $monMtableau ) {
    explode(" ", $monMtableau);
    $number++;
    $liste = str_replace($monMtableau,'Nombre = '.$number.'<br />',$liste);
    }
    echo $liste;
    renvoie toujours

    Nombre = 1
    Nombre = 2
    Nombre = 3
    Nombre = 1 Jacques
    Nombre = 5

    Hélas....

  4. #4
    Membre chevronné Avatar de licardentaistor
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juillet 2021
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juillet 2021
    Messages : 346
    Par défaut
    non mais je donne l'idée .... pas le code complet, il ne suffit pas de recopier bêtement ce que je dit et ne rien comprendre..

    si je vous conseille de refaire un explode avec un espace comme séparateur c'est pour traiter les cas des noms composés, à la place d'incrémenter $number il faut mettre la taille du tableau que renvoi explode.

  5. #5
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 563
    Par défaut
    Bonjour,

    Pourquoi ne pas utiliser les clés du tableau ? :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $tableau = explode(',', $liste);
    $remplacements=implode("<br />",array_map(function($index,$value){return "Nombre=".($index+1);},array_keys($tableau),$tableau));
    echo $remplacements;

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 719
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 719
    Par défaut
    le souci n'est pas le nom composé mais le fait que Jean Jacques contienne la chaine Jean. donc au 1er passage, les 2 "Jean" sont remplacés.

    peut-être que vous pouvez éviter cela en commençant par remplacer les chaines les plus grandes mais cela dépend du reste de votre code.

  7. #7
    Membre du Club
    Homme Profil pro
    Webdesigner
    Inscrit en
    Mai 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Mai 2022
    Messages : 6
    Par défaut
    Bonjour mathieu.
    Je voulais éviter de poster tout le code, histoire de ne pas polluer le forum mais je crois que je ne vais pas pouvoir y réchapper.

    ** attention, c'est du bidouillage, je suis sur qu'il y a des énormités, mais je débute vraiment...

    En gros, je souhaite dans un article (blog ou page quelconque) qui serait posté sur une page de site, pouvoir transformer une liste de mots clés de cet article en images (dans lesquelles sont écrites ces mots clés). en effet, je ne souhaite pas que Google "lise" ces mots clés spécifiques.

    J'ai donc prévu, quand je poste mon texte de pouvoir écrire une partie de cette façon: {motscles=Jean, Pierre, Paul, Jean Jacques, Martin}
    et ensuite, dans le fichier php qui lit le texte, de pouvoir isoler ce qui est entre {motscles= et }

    Pour celà, je dispose d'un fichier txt-img.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php
    ob_start();
    @session_start();
    header ("Content-type: image/png");
    $text=$_SESSION['images'][$_GET['img']];
    if($text=='')
     exit;
     
     $tab1 = array("&amp;","&eacute;","&quot;","'","&agrave;","&acirc;","&ecirc;","&icirc;","&ocirc;","&ucirc;","&auml;","&euml;","&iuml;","&ouml;","&uuml;","&Acirc;","&Ecirc;","&Icirc;","&Ocirc;","&Ucirc;","&Auml;","&Euml;","&Iuml;","&Ouml;","&Uuml;","&ccedil;");
     $tab2 = array("&","é","\"","'","à","â","ê","î","ô","û","ä","ë","ï","ö","ü","Â","Ê","Î","Ô","Û","Ä","Ë","Ï","Ö","Ü","ç");
     
     $text = str_replace ($tab1,$tab2,$text) ;
     
    $string = utf8_decode($text);                                            
    $font   = 4;
    $width  = ImageFontWidth($font) * strlen($string);
    $height = ImageFontHeight($font);
     
    $im = @imagecreate ($width,$height);
    $background_color = imagecolorallocate ($im, 255, 255, 255); //white background
    $text_color = imagecolorallocate ($im, 0, 0,0);//black text
    imagestring ($im, $font, 0, 0,  $string, $text_color);
    echo imagepng ($im);
    ?>
    Et dans le fichier de lecture de ma page, le texte étant appelé $contenu3

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    preg_match("#({motscles=)(.*)(})#Ui",$contenu3,$outmotscles);	
    preg_match("#({motscles=)(.*)(})#Ui",$contenu3,$outmotscles2);
     
    $debut = $outmotscles[1];
    $mesmotscles = $outmotscles[2];
    $fin = $outmotscles[3];
     
    $contenu3 = str_replace($debut,"",$contenu3);
    $contenu3 = str_replace($fin,"",$contenu3);
     
    $fn_listeMC = explode( ',', $mesmotscles );
     
     
    $mesmotscles2 = $outmotscles2[2];
    $mesmotscles2 = str_replace(',','',$mesmotscles2);
     
     
    $contenu3 = str_replace($mesmotscles,$mesmotscles2,$contenu3);
     
     
    $messorties=array();
    $numberMC = 0;
     
    foreach ( $fn_listeMC as $monMC ) {
    $numberMC++;
    $messorties[$numberMC] = $monMC;
    }
    @session_start();
    $_SESSION['images']=$messorties;
     
    $numberMC2 = 0;
     
    foreach ( $fn_listeMC as $monMC2 ) {
    $numberMC2++;
     
    $contenu3 = str_replace($monMC2,'<div class="mesmc">&nbsp;&nbsp;<i class="fas fa-check top-6"></i>'.($numberMC2 == 1?'&nbsp;&nbsp;':'').'<img src="modules/page/txt-img.php?img='.$numberMC2.'" /></div>',$contenu3);
    }
    tant que j'ai des mots différents dans ma liste, tout fonctionne, ma page affiche bien des images avec le texte écrit dedans à la place des mots, mais dès que j'ai cette histoire du Jean et Jean Paul, vu que Jean a déjà été remplacé, ça plante.

Discussions similaires

  1. [Tableaux] foreach avec tableau variable
    Par NerOcrO dans le forum Langage
    Réponses: 2
    Dernier message: 23/05/2007, 11h13
  2. [Tableaux] Foreach renvoie des valeurs double en php4
    Par Dantahoua dans le forum Langage
    Réponses: 5
    Dernier message: 10/04/2007, 17h49
  3. [Tableaux] Faire un remplacement dans une chaîne
    Par méphistopheles dans le forum Langage
    Réponses: 4
    Dernier message: 19/12/2006, 21h31
  4. [Tableaux] foreach() et tableau
    Par Blaireau dans le forum Langage
    Réponses: 4
    Dernier message: 07/08/2006, 16h11
  5. [Tableaux] Problème avec remplacement dans chaîne
    Par Baptiste Wicht dans le forum Langage
    Réponses: 5
    Dernier message: 13/07/2006, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo