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 :

Rechercher les mots d'une phrase dans une table [PHP 5.0]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de tutomania
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 68
    Par défaut Rechercher les mots d'une phrase dans une table
    Bonjour à tous, j'espère que vous allez bien

    Je vous explique ce que je veux faire :

    J'ai créé un abécédaire, une table SQL avec ID, NOM, DEFINITION
    En haut de ma page j'ai A - B - C - D etc...

    Lorsque je clique sur une lettre cela m'affiche les définitions des mots selon la lettre. Pas de souci jusqu'à la.


    Ce que je veux c'est que dans chaque définition si il y a un mot qui fait référence à une entrée dans la table il me change le mot de ma phrase en lien vers la définition.

    Je ne vois pas trop comment réaliser cette action

    Auriez vous une idée sur la marche à suivre ?

    ------

    Par exemple :

    Amour : définition de amour
    Agile : définition de agile
    ....
    Sentiment : l'amour est considéré comme un sentiment

    par exemple ci dessus dans la définition il y a le mot "amour", je voudrais qu'automatique il se mette en lien vers la définition de "Amour"

    Merci à tous par avance de l'aide que vous pourrez m'apporter.

    Cordialement,
    Xavier.

  2. #2
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Il te suffirait de traiter supprimer tous les caractères spéciaux de la définition (pour enlever les point, virgules etc.. et d'utiliser la fonction explode() pour découper les les mots sur les espaces.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $definition = "l'amour est considéré comme un sentiment";
     
    $definition_netoyee = preg_replace(array('@[^a-zA-Z -]@', "/ +/"), array(' ', ' '), trim($definition));  // Supprime les caractères spéciaux
     
    $definition_mots = explode(' ', $definition_netoyee);  // Découpe les mots sur les espaces
     
    print_r($definition_mots);
    $definition_mots est un tableau contenant tous les mots de ta définition.
    Il ne te reste plus qu'a le parcourir et vérifier si le mot existe.


    Edit : Ya un petit souci sur les accents

  3. #3
    Membre confirmé Avatar de tutomania
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 68
    Par défaut
    Bonjour Seb,

    Avec cette méthode ça implique de faire une requête sql sur chaque mot pour vérifier que tel mot à une entrée dans la table il me semble ? cela risque d'être un peu lourd ?

    N'y a t-il pas un moyen de mettre ma table dans un array avec id et nom seulement

    array_push($id=>$nom);

    et ensuite de comparer :

    Si $definition contient $nom on str_replace
    Quel serais la syntaxe de tout ça ?

  4. #4
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Pour les accents, tu peux corriger de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $definition = "l'amour est considéré comme un sentiment de chauve-souris";
     
    $definition_netoyee = preg_replace(array('@[^a-zA-ZàáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ -]@', "/ +/"), array(' ', ' '), trim($definition));  // Supprime les caractères spéciaux
     
    $definition_mots = explode(' ', $definition_netoyee);  // Découpe les mots sur les espaces
     
    print_r($definition_mots);
    Pour ta question tu as 2 solution :

    - Soit tu fais une requête par mot pour vérifier si il existe. Si tes définitions sont courtes et ne contiennent pas beaucoup de mots, ça peut etre intéressant. De plus tu peux limiter les requêtes et ne pas les exécuter pour une série de mots qui reviennent souvent comme "le", "la", "les" etc...

    Tu peux aussi créer une table contenant la liste de tous tes mots avec le moteur MEMORY histoire d'améliorer les performances

    - Soit tu récupères tous tes mots que tu ajoutes dans un tableau comme tu le propose et tu verifies avec un in_array().
    Par contre si ta table contien beaucoup de mots, ça risque être très lourd également.


    Dans les 2 cas, tu peux éventuellement créer un système de cache afin d'éviter de rechercher à chaque fois si les mots existent si la définition n'a pas été modifié et que aucun nouveau mot n'a été ajouté à ta base.

  5. #5
    Membre confirmé Avatar de tutomania
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 68
    Par défaut
    Disons que les entrées des définitions sont faites via un wysiwig (fckeditor)
    Du coup comme les entrées sont copié/collé de word il code source est énorme en terme de mot, même si la définition est courte.

    Dans ce cas de figure je pense qu'il serait plus sage de faire un regex et entourer les mots désirés par une balise de type [mot]mon mot[/mot]

    On perd un peu de dynamisme mais bon ...

    Merci pour ton aide Seb, j'avous que j'ai un peu de mal avec les tableaux, ce que j'imaginais c'était (en langage humain^^)

    1 - création d'un array avec id et nom
    2 - Lancement de la boucle des définitions
    3 - preg_match entre $définition et mon array
    4 - si il trouve un mot il le remplace str_replace sinon il fait rien

  6. #6
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Attention avec fckEditor car il ajoute des balises html pour la mise en forme.

    pense à les retirer avec strip_tags() avant de rechercher tes mots.

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

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 18h37
  2. [XL-2003] Insérer la valeur d'une cellule dans une phrase d'une autre
    Par DonaldTron dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/04/2009, 20h50
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 27/08/2007, 00h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 11h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 14h48

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