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] Couper un texte tous les xx mots


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Points : 11
    Points
    11
    Par défaut [Tableaux] Couper un texte tous les xx mots
    Bonjour,

    je cherche à couper un texte tous les 3 mots et les mettre en ARRAY. J'arrive à couper un texte à chaque mot ($mots = preg_split("/[\s,]+/", $texte), mais pas tous les 3 mots
    De plus, j'aimerais que ce texte soit coupé d'une certaine manière. Par exemple :
    $texte = "je suis une bille en programmation PHP"
    J'aimerai que mon mon tableau ARRAY soit créé comme cela :
    array ("je suis une", "une bille en", "en programmation php");
    vous voyez donc la particularité de ma requete...
    Merci pour votre aide précieuse,
    François

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut vite fait
    salut bon pas trop difficile,a++

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    $texte = "je suis une bille en programmation PHP";
    $u=0;
    $decoupe=explode(" ",$texte);
    for($i=2;$i<count($decoupe);$i++){
        if(is_int($i/2)){
            $u++;
            $tableau[$u]=$decoupe[$i-2]." ".$decoupe[$i-1]." ".$decoupe[$i];
        }
    }
     
    print_r($tableau);
    ?>
    Array ( [1] => je suis une [2] => une bille en [3] => en programmation PHP )

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup pour ton aide, et désolé pour le retard.
    Je suis confronté à un problème si le texte à séparer contient des signe de ponctuation.
    Mon souhait est de séparer un texte (string) en mots et de les ajouter dans un tableau (Array) qu'il y ait ou non de la ponctuation.

    J'ai bien essayé avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $texte = @$_POST["texte"];
    $mots = preg_split("/[\s,.!?;: ]+/", $texte);
    $nombre_de_mots = count($mots);
    $tableau=array();
    for($i=0;$i<=$nombre_de_mots;)
    {
        array_push($tableau,$mots[$i]);
        $i++;
    }
    mais ce n'est pas très concluant, notamment quand le texte vient d'un formulaire en TEXTAREA avec des saut de ligne...
    Bref, je craque !
    Quelqu'un pour m'aider ?
    Merci par avance,
    François

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    preg_split vous renvoie déjà un tableau pourquoi en faire une copie ensuite :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    $string = <<< EOS
     	Merci beaucoup pour ton aide, et désolé pour le retard.
    	Je suis confronté à un problème si le texte à séparer contient des signe de ponctuation.
    	Mon souhait est de séparer un texte (string) en mots et de les ajouter dans un tableau (Array) qu'il y ait ou non de la ponctuation.
    EOS;
    
    header('Content-type: text/plain');
    print_r(preg_split('/[\s[:punct:]]/', $string, -1, PREG_SPLIT_NO_EMPTY));
    Ne vous convient pas ? En quoi le fait que le texte provient d'un textarea poserait-il un problème ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup ! En fait je me créais des problèmes tout seul....
    Par contre j'ai encore besoin d'aide !

    Voici mon code, mais le remplacement de mot ne fonctionne pas ou plutot si il fonctionne mais si un mot fait une lettre il me remplace cette lettre dans les mots qui la contiennent

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $mots = preg_split('/[\s[:punct:]]/', $texte, -1, PREG_SPLIT_NO_EMPTY);
    $nombre_de_mots = count($mots);
    puis requete SQL qui fait une recherche sur chaque mois du Tableau $mots

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for($i=0;$i<=$nombre_de_mots;)
     { $REQUETE_SQL = "SELECT * FROM table where mot_remplace='$mots[$i]'";
    ........
    $texte = str_replace($mots[$i], $row['mot_remplace'], $texte);
    $i++;
    }
    J'ai bien essayé avec ça en rajoutant un espace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $texte = str_replace(' '.$mots[$i].' ', ' '.$row['mot_remplace'].' ', $texte);
    mais lorsque le mot est en début de phrase ou qu'il est précédé ou suivit d'un ponctuation, ca ne fonctionne pas...

    Merci pour votre aide !
    Francois

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Si j'ai compris ce que vous vouliez faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for($i=0; $i < $nombre_de_mots; $i++) {
       $REQUETE_SQL = "SELECT * FROM table where mot_remplace='$mots[$i]'";
       # ...
       $texte = preg_replace('.\b' . $mots[$i] . '\b.', $row['mot_remplace'], $texte);
    }
    Par contre il y a peut être moyen d'optimiser

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Merci pour ton aide, cependant ça ne fonctionne que partiellement
    Je souhaiterais qu'il me fasse un preg_replace qu'à la seule condition que le mot à remplacer se trouve entre des espaces, de la ponctuation (à gauche et/ou à droite du mot) et qu'enfin qu'il ne me modifie pas le mot si celui ci est compris dans un autre mot.

    Par exemple je souhaite qu'il me remplace le mot 'car' en 'voiture' mais pas le mot 'carrefour' en "voiturerefour".

    J'espère que je suis clair dans mes explications

    Ca doit etre avec les regex mais je dois avouer que j'ai du mal avec.
    Francois

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par sonno
    Merci pour ton aide, cependant ça ne fonctionne que partiellement
    Je souhaiterais qu'il me fasse un preg_replace qu'à la seule condition que le mot à remplacer se trouve entre des espaces, de la ponctuation (à gauche et/ou à droite du mot) et qu'enfin qu'il ne me modifie pas le mot si celui ci est compris dans un autre mot.
    Le délimiteur de mot (\b) ne fait pas son travail ? Pourtant $mots[$i] ne contient aucun métacaractère. Auriez-vous un exemple ?

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    malheureusement ça ne fonctionnait pas, mais j'ai (je pense) trouvé une solution à mon problème en utilisant la fonction strtr() de la façon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $traduction ["$mots[$i]"] = $row['mot_remplace'];
    $newtexte = strtr($texte, $traduction);
    Car en fait je ne voulais changer qu'une seul fois un mot par ordre du tableau $mots.
    Donc si ça peut aider, voici la solution que j'ai finalement choisi...
    Francois

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

Discussions similaires

  1. [XL-2010] Insérer un mot tous les 100 mots
    Par nonodudu77 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 01/12/2014, 14h09
  2. [Tableaux] Découper un texte tous les 40 lignes
    Par TooKool dans le forum Langage
    Réponses: 1
    Dernier message: 27/10/2008, 15h11
  3. Réponses: 4
    Dernier message: 31/07/2008, 16h11
  4. Ouvrir automatiquement tous les fch. texte d'un repertoire
    Par metalimad dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 18/02/2005, 14h47
  5. changer le texte de tous les Items dans un mainmenu
    Par C.M dans le forum Composants VCL
    Réponses: 7
    Dernier message: 25/07/2004, 13h19

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