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 :

comparer les élements string de 2 tableaux et mettre en gras la différence [PHP 7]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 467
    Par défaut comparer les élements string de 2 tableaux et mettre en gras la différence
    bonjour,

    j'ai 2 chaînes de caractères comme ça :

    $chaine1 ="a,d,e";
    $chaine2="a,e,b,d,c";

    je voudrais mettre en gras (entre balise <strong>) les éléments de $chaines2 qui ne sont pas dans la chaine1 (dans mon exemple ce sont b et c). Les 2 chaines n'ont aucun ordre prédéfinies.
    donc obtenir $chaine2 comme ça : "a,e,b,d,c"


    comment faire le plus proprement possible sans surcharger le serveur (là j'ai simplifié l'exemple mais il peut y avoir 100 éléments voire plus).

    mon idée de base était de faire avec des EXPLODE, puis 2 boucles FOR pour comparer, voire transformer (concantener <strong> et </strong> à ce qui ne sera pas trouver dans l'un des tableaux) puis refaire un IMPLODE pour rétablir la chaine2.

    Je suis en php7, peut-être que cela peut se faire plus "aisément" maintenant ? c'est clairement un traitement T&L que je veux alors peut-être que php7 intègre déjà une fonction T&L (transforme & lightning pour data..)

    Merci de votre lecture et/ou coup de main.

  2. #2
    Membre très actif
    Homme Profil pro
    Déveleoppeur Web/Mobile
    Inscrit en
    Avril 2013
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déveleoppeur Web/Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 330
    Par défaut
    Bonjour,

    La fonction explode est une bonne idée pour extraire les éléments dans deux tableaux distinct. Ensuite tu peux regarder du côté de la méthode array-diff pour extraire les différences entre les deux tableaux.

  3. #3
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 467
    Par défaut
    ah merci pas bête !

    comme ça je crée un nouveau tableau avec la diff puis je l'EXPLODE en choisissant comme séparateur "</strong>,<strong>" , que je contactene à $chaine1 en rajoutant "<strong>" devant !

  4. #4
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Bonsoir.
    Clavier, il y a bien des choses que tu devrais préciser.
    La chaîne 2 est-elle toujours plus grande que la chaîne 1 ?
    La chaîne 1 comme la chaîne 2 comportent-elles potentiellement plus de 1 fois la même lettre ?
    Tu as des chaînes avec des virgules. La virgule est-elle toujours un séparateur entre 2 lettres ou bien peut-il y avoir plusieurs lettres entre deux virgules ?
    Enfin, quid des lettres accentuées ? Présentes ou absentes ?

    Selon tes réponses, les fonctions sur les string peuvent aussi régler bien ta problématique, elles sont aussi nombreuses que les fonctions sur tableau.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 467
    Par défaut
    La chaîne 2 est-elle toujours plus grande que la chaîne 1 ?
    oui car chaine1 est une extraction de de chaine2 (ex : chaine1 est une liste de gens présents, chaine2 une liste total des gens)

    La chaîne 1 comme la chaîne 2 comportent-elles potentiellement plus de 1 fois la même lettre ?
    non, aucun tuple homonyme


    Tu as des chaînes avec des virgules. La virgule est-elle toujours un séparateur entre 2 lettres ou bien peut-il y avoir plusieurs lettres entre deux virgules ?
    oui la virgule est un séprarateur. j'ai simplifié, ce ne seront jamais des lettres de 1caractère mais des mots. par exemple aaaaa,bbb,cccc,dd,eee,ee,kk,aa

    Enfin, quid des lettres accentuées ? Présentes ou absentes
    ?
    peu importe, car comme dit dans la 1ere précistion, les 2 listes sont remplies à partir des mêmes tuples. Si ya un accent d'un côté, on le retrouvera de l'autre.

    Et aussi par déduction: chaine1 ne contient pas d'élément qui ne soit pas déjà dans chaine2.

  6. #6
    Membre éprouvé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 467
    Par défaut
    bonjour,

    voilà donc ça marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $tab_partiel=explode(",",$chaine1l);
    $tab_complet=explode(",",$chaine2);
    $tab_manquant=$result = array_diff($tab_complet, $tab_partiel);
    $manquant=implode("</strong>,<strong>",$tab_manquant);
    $formattage=$partiel.",<strong>".$manquant."</strong>";
    $formattage=ltrim($formattage,",");
    après si ça peut être amélioré, pourquoi pas.

    je pourrais tester les quantités pour aller encore plus vite au cas où $chaine1 est null.
    je pourrais aussi respecter l'ordre de restitution mais ce n'est pas grave ici si tous les manquants sont à la fin.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparer les elements de deux tableaux de tableaux String
    Par aladin15 dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 27/04/2020, 01h57
  2. Réponses: 4
    Dernier message: 19/07/2016, 11h47
  3. [XL-2010] [Novice] Comparer les données de Msgbox à un tableaux
    Par fasedan dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/06/2014, 00h14
  4. [MySQL] Comparer les valeurs de 2 tableaux serialisés dans une requête
    Par lodan dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 11/05/2010, 08h59
  5. [Tableaux] Comparer les lignes d'un même tableau
    Par derfatypik dans le forum Langage
    Réponses: 5
    Dernier message: 06/01/2006, 12h14

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