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 :

Trouver dans ma chaîne selon un nombre de caractère [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut Trouver dans ma chaîne selon un nombre de caractère
    Bonjour,

    Comment extraire le premier mot d'une chaîne qui a plus de 5 caractères ? (5 ou plus...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $machaine ="cool j'ai compris comment lire mon dossier debout";
     
     // explode, implode..
     
    $firstmot =" ????";  // devrait m'afficher => compris
    ?>

    2ème demande, idem mais doit m'afficher les 3 premiers mots de plus de 5 lettres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $machaine ="cool j'ai compris comment lire mon dossier debout";
     
    // explode, implode...
     
    $firstmot =" ????";  // devrait m'afficher => compris comment dossier
    ?>

    Merci pour votre aide
    Yule

  2. #2
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Ca, je sais faire

    Code php : 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
    <?php
     
    $machaine = "cool j'ai compris comment lire mon dossier debout";
     
    // explode, implode..
     
    //$firstmot = " ????";  // devrait m'afficher => compris
     
    $machaine=explode(' ',$machaine);
    $mot_de_plus_de_5=[];
    foreach($machaine as $mot_de_machaine)
        if (strlen($mot_de_machaine)>=5)
            $mot_de_plus_de_5[]=$mot_de_machaine;
    $firstmot=$mot_de_plus_de_5[0];
    $secondmot=$mot_de_plus_de_5[1];
    $thirdmot=$mot_de_plus_de_5[2];
    echo "1=".$firstmot."<br/>";
    echo "2=".$secondmot."<br/>";
    echo "3=".$thirdmot."<br/>";

  3. #3
    Membre régulier
    Homme Profil pro
    HobbyWeb
    Inscrit en
    Janvier 2005
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : HobbyWeb

    Informations forums :
    Inscription : Janvier 2005
    Messages : 183
    Points : 102
    Points
    102
    Par défaut
    Oui tu sais !!

    C'est parfait et merci bien pour ton aide.

    Cordialement

    Yule

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    @laurentSc
    Pour tenir compte des lettres accentuées (UTF-8), il faut utiliser mb_strlen().
    ex. :
    • strlen('été') -> 5 (pas OK)
    • mb_strlen('été') -> 3 (OK)

    On peut aussi d'abord se débarrasser des ponctuations (qu'on remplace par des espaces) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function get_mots($chaine, $nbre=1)
    {
    	$chaine = explode(' ', preg_replace('#[\'\"\.,;:]#', ' ', $chaine));
    	$mots = [];
    	foreach($chaine as $mot)
    	{
    		if (mb_strlen($mot)>=5)
    		{
    			$mots[] = $mot;
    		}
    	}
    	return $mots;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $chaine = 'Cool j\'ai compris comment lire mon dossier debout';
    var_dump( get_mots($chaine, 5) );
     
    $chaine = 'Cool, j\'irai cet été m\'étaler sur le sable au Touquet-Paris-Plage !';
    var_dump( get_mots($chaine, 5) );
    Dernière modification par Invité ; 25/04/2020 à 19h56.

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    y a pas à dire ; c'est mieux...

  6. #6
    Invité
    Invité(e)
    Par défaut
    ENCORE mieux :

    1- 1er mot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function get_mot_first($chaine, $nbre=1)
    {
    	$mot = '';
    	$result = preg_match('#(*UTF8)[^ \'\"\.,;:-]{'.$nbre.',}#', $chaine, $matches);
    	if( !empty($matches) )
    	{
    		$mot = $matches[0];
    	}
    	return $mot;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $chaine = 'Cool, j\'irai cet été m\'étaler sur le sable à Saint-Tropez !';
    echo get_mot_first($chaine, 5);
    2- Tous les mots :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function get_mots_all($chaine, $nbre=1)
    {
    	$mots = [];
    	$result = preg_match_all('#(*UTF8)[^ \'\"\.,;:-]{'.$nbre.',}#', $chaine, $matches);
    	if( !empty($matches) )
    	{
    		$mots = $matches[0];
    	}
    	return $mots;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $chaine = 'Cool, j\'irai cet été m\'étaler sur le sable à Saint-Tropez !';
    var_dump( get_mots_all($chaine, 5) );
    • (*UTF8) : important pour les caractères accentués (multi-bytes) *
    • [^ \'\"\.,;:-] : tout sauf espace, et certains caractères de ponctuations
    • {5,} : 5 caractères ou plus -> (*UTF8) permet un compte correct

    * (*UTF8) -> je viens de le trouver ici
    Dernière modification par Invité ; 25/04/2020 à 20h04.

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

Discussions similaires

  1. Trouver le nombre de voyelles dans une chaîne
    Par asma ch dans le forum x86 16-bits
    Réponses: 1
    Dernier message: 09/08/2016, 20h36
  2. [CR 10] Heure dans format chaîne à convertir en nombre
    Par leloup84 dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 31/07/2014, 15h57
  3. Valeur selon le nombre de caractères
    Par avyrex dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/03/2009, 14h09
  4. Découper un chaîne selon un nombre Maxi de caractères
    Par cashmoney dans le forum Langage
    Réponses: 13
    Dernier message: 10/02/2009, 15h29
  5. [CR10] Faire un tri selon un nombre de caractères
    Par John0123 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 02/10/2008, 15h04

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