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 :

Compter et remplacer une occurrence présente plusieurs fois dans une chaîne de caractères


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Compter et remplacer une occurrence présente plusieurs fois dans une chaîne de caractères
    Compter et remplacer une occurrence présente plusieurs fois dans une chaîne de caractères:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    //Permet de recherche plusieurs fois l'occurrence
    while(???){//Je cherche à avoir le résultat de preg_match ici pour rechercher [CR tant que la chaîne est trouvée (bool/int 1)
                    //Châine de cacractères
                    $message = "[CR= TEST01 [CR= TEST02 [CR=";
     
                    //Ce preg_match ne fonctionne pas correctement(à corriger)
    		$ret = preg_match('[CR=',$msg,$matches);
     
    		//Ces 3 lignes fonctionnent bien
    		$msg = str_ireplace('[CR=',$message,$msg);
    		$msg = str_ireplace(']','',$msg);
    		$msg = str_ireplace($msgtrois,'',$msg);
     
    //Fin du while		
    }

  2. #2
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Bonjour

    je n'ai probablement pas compris (ta demande est fort peu explicite).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
     $message = "[CR= TEST01 [CR= TEST02 [CR=";
     
     $count=0;
     
     $newMessage = str_replace("[CR=", "", $message, $count);
     
     echo $newMessage . PHP_EOL . 'Nombre de remplacements: '.strval($count);
    Test en ligne en suivant ce lien: https://onlinephp.io/c/80991

    Le tout est utilisant str_replace et son quatrième paramètre : combien? https://www.php.net/manual/en/function.str-replace.php

  3. #3
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    le code que j'ai actuellement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
            //Permet de recherche plusieurs fois l'occurrence
            while(???){//Je cherche à avoir le résultat de preg_match ici pour rechercher [CR tant que la chaîne est trouvée (bool/int 1)
                            //Châine de cacractères
                            $message = "[CR= TEST01 [CR= TEST02 [CR=";
     
                            //Ce preg_match ne fonctionne pas correctement(à corriger)
            		$ret = preg_match('[CR=',$msg,$matches);
     
            		//Ces 3 lignes fonctionnent bien
            		$msg = str_ireplace('[CR=',$message,$msg);
            		$msg = str_ireplace(']','',$msg);
            		$msg = str_ireplace($msgtrois,'',$msg);
     
            //Fin du while		
            }
    Le code que je veux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            //Permet de recherche plusieurs fois l'occurrence
            while(preg_match('[CR=',$message,$msg)!=0)
    {
                            //Châine de cacractères
                            $message = "[CR= TEST01 [CR= TEST02 [CR=";
     
            		//Ces 3 lignes fonctionnent bien
            		$msg = str_ireplace('[CR=',$message,$msg);
            		$msg = str_ireplace(']','',$msg);
            		$msg = str_ireplace($msgtrois,'',$msg);
     
            //Fin du while		
            }

  4. #4
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Un bonjour et un merci peut-être...

    Et vous n'avez toujours pas explicité (clairement) votre besoin.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Bonsoir,
    Compter et remplacer une occurrence présente plusieurs fois dans une chaîne de caractères:
    Je cherche la chaîne suivante: [CR= plusieurs fois. De cette manière je remplace le 1er [CR=valeur1] puis le 2nd [CR=valeur2] et ainsi dessuite.
    Le preg_match() devrait me retourner le nombre d’occurrence OU le traitement des occurrence une par une.
    D'où le while pour remplacer [CR= à chaque fois qu'il est présent dans la chaîne $msg

    il me faut un preg_match() correctement paramétré.

    Merci pour votre aide !

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 332
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 332
    Points : 15 676
    Points
    15 676
    Par défaut
    vous pouvez récupérer toutes les occurrences en une seule fois avec cette fonction :
    https://www.php.net/manual/fr/functi...-match-all.php
    et il y a le drapeau PREG_OFFSET_CAPTURE pour récupérer la position du texte trouvé.

    si vous avez besoin de plus d'aide pour la suite, donnez nous plus de détails sur ce par quoi vous voulez remplacer ces textes.

  7. #7
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Un avant (votre chaîne en entrée) et le après (ce que vous voulez obtenir comme résultat).

    Avez-vous jeté un œil à ma proposition ? Si elle ne réponds pas au besoin, en quoi s'il vous plaît ?

  8. #8
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Aidez moi pour le preg_match_all() s'il vous plait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    preg_match_all(string pattern,string subject,array matches,int flags,int offset);
    pattern='[CR=';
    subject=$msg;
    matches=( je manipule mal les arrays) 
    int flags=PREG_OFFSET_CAPTURE
    int offset=(je ne sais pas quoi mettre)
    cavo789 j'ai mis $count=0 ça ne fonctionne toujours pas.

  9. #9
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Tu as mis $count à zéro et cela ne fonctionne pas. Je dois être vraiment KO ce soir parce que je ne comprends toujours pas.

    Dans ma proposition je remplace ta chaîne de caractères par une chaîne vide autant de fois qu'elle est présente et je récupère ensuite $count qui me donne le nombre de remplacements et donc le nombre d'occurrences.

    Il n'y a pas à mettre sur zéro (uniquement au tout début pour initialiser la variable), c'est str_replace qui fait le job et qui retourne le chiffre.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    cavo789 effectivement ça fonctionne merci beaucoup !

    Maintenant il me faut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                    $msgun = explode('[CR=',$msg);
    		$msgdeux = explode(']',$msgun[1]);
    		$msgtrois= $msgdeux[0];
    en mettant $msgun et les autres en array...

  11. #11
    Membre expert
    Avatar de cavo789
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2004
    Messages
    1 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 785
    Points : 3 048
    Points
    3 048
    Par défaut
    Citation Envoyé par SkyFox31 Voir le message
    cavo789 effectivement ça fonctionne merci beaucoup !
    Je suis totalement dérouté par ce fil de discussion.

    La proposition que j'ai fait dans mon post #2 fonctionne ... et vous le voyez juste dans votre réponse post #10... Aviez-vous seulement testé ma proposition avant de créer les posts #3 et suivants ?

    Citation Envoyé par SkyFox31 Voir le message
    Maintenant il me faut:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                    $msgun = explode('[CR=',$msg);
            $msgdeux = explode(']',$msgun[1]);
            $msgtrois= $msgdeux[0];
    en mettant $msgun et les autres en array...
    La fonction explode retourne déjà un array : https://www.php.net/manual/en/function.explode.php. Votre "il me faut ... un array" pour $msgun est donc déjà le cas.

    Pour $msgdeux; euh? Votre proposition de texte est "[CR= TEST01 [CR= TEST02 [CR=" et elle ne contient jamais le caractère ] aussi; oui, $msgdeux pourrait être un array pour autant que le caractère ] ait été présent et pour autant que vous faites attention à ce que vous écrivez. En effet vous écrivez explode (']', $msgun[1]) càd que vous cherchez le caractère ] dans la seconde position du tableau $msgun (puisqu'en php on commence à zéro). Et dans cette position vous trouvez le texte TEST01 donc impossible à trouver votre ].

    Pour $msgtrois c'est tout autant spécial. Il s'agirait donc de la valeur en position un du tableau $msgdeux qui, si elle est connue, serait une chaîne de caractères.

    Je me repose strictement la même question que depuis le début : quel est votre besoin ? Pas votre code, votre besoin. Vous avez une chaîne en entrée, vous souhaitez quelle chaîne en sortie et pourquoi voulez-vous isoler des éléments dans des tableaux ?

    Note : le site https://onlinephp.io/ vous permet de jouer avec du code PHP et d'en afficher le rendu immédiatement dans le navigateur. Voici un exemple pour $msgun: https://onlinephp.io/c/6746a

  12. #12
    Membre à l'essai
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Novembre 2018
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Novembre 2018
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Je voulais un preg_match() et éviter le str_replace.
    J'ai validé votre solution mais le script entier a des besoins différents.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            $msgun = explode('[CR=',$msg);
            $msgdeux = explode(']',$msgun[1]);
            $msgtrois= $msgdeux[0];
    J'explose la chaîne $msg pour prendre $msgun[0] avant et $msgun[1] après le délimiteur [CR=.
    J'explose la partie 2 : $msgun[1] avec ] comme délimiteur en $msgdeux[0] la valeur du CR= et $msgdeux[1] contenant d'autres [CR=,

    ensuite je cherche dans la base de données $msgtrois qui contient plusieurs [CR=.

    maintenant je dois récupérer la valeur $msgtrois qui varie
    preg_match_all() OU Array OU Tableaux ???

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/01/2019, 10h57
  2. Réponses: 9
    Dernier message: 25/09/2017, 11h55
  3. [MySQL] Remplacer une chaîne de caractères dans une base de données
    Par Furius dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 27/11/2013, 21h06
  4. Réponses: 8
    Dernier message: 15/07/2006, 18h59
  5. Remplacer une chaîne de caractères dans une base
    Par Furius dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/10/2005, 23h03

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