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

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

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 423
    Points : 874
    Points
    874
    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 confirmé
    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
    Points : 545
    Points
    545
    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 éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 423
    Points : 874
    Points
    874
    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 : 58
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 628
    Points
    3 628
    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.

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

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 423
    Points : 874
    Points
    874
    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 éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 423
    Points : 874
    Points
    874
    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