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 :

Modification (coloration) de tableau à l'intérieur d'une boucle


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 63
    Points : 33
    Points
    33
    Par défaut Modification (coloration) de tableau à l'intérieur d'une boucle
    Bonjour, courage plus qu'un jour après c'est le WE ;D

    Je viens vers vous (une fois de plus) parce que j'ai un problème (logique) sur quelque chose auquel je n'avais jamais pensé. Je n'arrive pas à modifier un tableau au fur et à mesure que j'opère des tests dessus. Alors je sais qu'on peut passer par les clefs, ou par une référence '&', mais je n'y arrive pas pour autant

    Je vous montre mon code pour le moment (qui ne marche pas donc) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    foreach ($arrayResult as $value) {
        echo $value . '<br/>';
        $format = '<span style="color:' . $get_color() . ';"><b>' . $value . '</b></span>';
        foreach($arrayResult as $key => $value2) {
            $arrayResult[$key] = str_ireplace($value, $format, $value2);
        }
    }
    L'idée est de coloré les cases suivantes du tableau en fonction du contenu de la case actuelle.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Je ré-explique mieux.

    J'ai un tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    array = ("les enfants de Marie", "les enfants de Marie vont bien", "il fait beau");
    Et un texte :

    Les enfants de Marie s'amusent bien parce qu'il fait beau dehors. Les enfants de Marie vont bien.

    J'aimerais obtenir la coloration suivante (peu importe les couleurs) :

    Les enfants de Marie s'amusent bien parce qu'il fait beau dehors. Les enfants de Marie vont bien.

    Or si j'utilise la technique que j'ai mentionnée dans mon premier post, c'est à dire faire une boucle sur le tableau et une coloration au fur et à mesure.
    J'obtiens ceci :
    Les enfants de Marie s'amusent bien parce qu'il fait beau dehors. Les enfants de Marie vont bien.

    Cela s'explique par le fait que le motif "les enfants de Marie vont bien" n'est plus trouvé dans le texte car il est maintenant égal à "<span style="color:red>Les enfants de Marie</span> vont bien".
    Donc j'aimerais également changé le motif à rechercher et à remplacer dans le tableau, de tel façon à ce que le str_ireplace ou le preg_replace fonctionne.

    Voilà ^^ Merci pour votre attention !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Je me permets un ptit' up avec une re-explication.

    J'ai un tableau d'éléments à colorer dans un texte. Sauf que certains de ses éléments sont des sous séquences de d'autres. Du genre "il fait beau" et "il fait beau dehors". Du coup lorsque je remplace (pour la colorer) la chaîne "il fait beau" dans le texte, il me retrouve pas au tour suivant la chaîne "il fait beau dehors" car les balises HTML "<span>" faussent tout. C'est pourquoi j'ai eu l'idée de mettre les balises HTML aussi dans les éléments du tableau suivant, afin que le motif "<span>il fait beau</span> dehors" soit rechercher et du coup trouvé.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    J'ai compris mon problème xD

    Lorsque de toute façon j'arrive à produire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <span style="color:#81A6DC;">
        <span style="color:#0E4AD1;">
            il fait beau
        </span> ce soir
    </span>
    La page html affiche : il fait beau ce soir et non pas il fait beau ce soir. Donc en fait je cherche à faire la mauvaise chose, l’interpréteur HTML des navigateur me pourrient la vie xD Il n'y a pas de priorité sur les balises <span> surenglobante Du coup ça remet toute ma technique en cause, je ne sais pas comment faire...

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par 0.GeGe.0 Voir le message
    Il n'y a pas de priorité sur les balises <span> surenglobante
    Effectivement, c'est même tout le contraire.
    Le CSS c'est simple : celui qui parle en dernier a raison. On lit les règles CSS dans l'ordre où on les rencontre et les balises se rencontrent de l'extérieur vers l'intérieur, depuis <body> vers la dernière balise englobante.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Merci ^^ mais du coup :'( si quelqu'un a une autre technique...? Je suis preneur.

    Je suis parti sur ça en attendant :

    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
     
    function get_color() {
        return sprintf('#%06X', mt_rand(0x0000CC, 0xFFFF99));
    }
     
    function f($a, $b) {
        $c = str_split($a);
        foreach($b as $v) {
            if(($pos = strpos($a, $v)) !== FALSE) {
                $c[$pos] = '<span style="color:' . get_color() . '">' . $c[$pos];
                $c[$pos + (strlen($v)-1)].= '</span>';
            }
        }
        return implode($c);
    }
     
    $a = "Les enfants de Marie s'amusent bien parce qu'il fait beau dehors. Les enfants de Marie vont bien.";
    $b = array("Les enfants de Marie", "Les enfants de Marie vont bien", "il fait beau");
     
    echo f($a, $b);
    Mais le problème c'est que à cause du strpos ça ne colore que la première occurrence. Puis après ce cuisant échec je suis un brin démotivé là... Un sauveur serait le bienvenue, ou UNE ? ^^

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 33
    Points : 38
    Points
    38
    Par défaut
    Tu veux donc faire en sorte que ce soit "l'expression la plus longue" qui soit colorée ? (""Les enfants de Marie vont bien" et non ""Les enfants de Marie"

    Tu peux boucler sur ton tableau '$b' et lorsque tu trouves qu'un élément est un sous élément d'un autre tu le supprime de ce même tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $b = array("Les enfants de Marie", "Les enfants de Marie vont bien", "il fait beau" , "il fait beau dehors");
    deviendrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $b = array("Les enfants de Marie vont bien", "il fait beau");
    Puis tu fait ton traitement comme au début vu que tu n'auras plus de pb d'élément enfants

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2012
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Bonjour, merci pour ta réponse.

    Non je ne peux pas faire ça :/ parce qu'en fait il est possible que dans mon texte ensuite il y également l'occurrence "les enfants de Marie" seule et je voudrais la colorer si elle s'y trouve

Discussions similaires

  1. fixer la colorbar à l'intérieur d'une boucle
    Par helaaa dans le forum MATLAB
    Réponses: 2
    Dernier message: 31/08/2011, 11h56
  2. récupération de valeur d'un tableau au sein d'une boucle!
    Par wiama dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/05/2010, 15h36
  3. [Débutant] Choix de fonction à l'intérieur d'une boucle
    Par mdelvaux89 dans le forum MATLAB
    Réponses: 7
    Dernier message: 08/04/2009, 12h01
  4. [MySQL] Ecrire dans une table à l'intérieur d'une boucle
    Par zigzagbe dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 19/08/2008, 23h40
  5. Affectation de variable boucle FOR à l'intérieur d'une boucle WHILE
    Par Droïde Système7 dans le forum Débuter
    Réponses: 10
    Dernier message: 05/11/2007, 19h11

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