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 :

Soustraire des parties d'une chaine de caractere


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut Soustraire des parties d'une chaine de caractere
    Bonsoir,

    Je cherche à récupérer plusieurs parties d'une chaîne de caractère, mais je n'ai pas d'idée pour y parvenir au dela de deux parties.

    Je m'explique, j'ai un champ dans une url qui contient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier.php?champ=nomduchamp_idligne&...........
    Dans ce cas, je sais récupérer les deux parties en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $champ = substr(@$_GET["champ"], 0, strrpos(@$_GET["champ"], '_'));
    $idligne = substr(@$_GET["champ"], -1);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier.php?champ=nomduchamp_idligne_idsimulation&...........
    exemple de nom du champ : olivier_1_5 ou j'ai besoin de recuperer Olivier, le 1 et le 5

    Je ne sais pas comment dissocier les 3 parties
    nomduchamp
    idligne
    idsimulation

    Merci milles fois de votre aide.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Bon j'ai trouvé la solution qui n'est pas trés belle mais qui fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $champ="toto_1_2";
    $idsimul = substr($champ, -1); echo 'idsimul : '.$idsimul.'<br>'; // affiche 2
    $champ = substr($champ, 0, strrpos($champ, '_')); 
    $idligne = substr($champ, -1); echo 'idligne : '.$idligne.'<br>'; // affiche 1 
    $champ = substr($champ, 0, strrpos($champ, '_')); echo 'champ : '.$champ.'<br>'; // affiche toto
    Bonne soirée a tous

  3. #3
    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
    Prenons un exemple, je ne suis pas sûre de bien comprendre :

    Si tu as

    fichier.php?dessert=tarte_fruit_yaourt&entree=concombre_pate_oeufmimosa&plat=boeuf_veau_saumon

    tu veux aboutir à ce tableau associatif ?

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Array
    (
        [0] => Array
            (
                [champ] => dessert
                [valeurs] => Array
                    (
                        [0] => tarte
                        [1] => fruit
                        [2] => yaourt
                    )
     
            )
     
        [1] => Array
            (
                [champ] => entree
                [valeurs] => Array
                    (
                        [0] => concombre
                        [1] => pate
                        [2] => oeufmimosa
                    )
     
            )
     
        [2] => Array
            (
                [champ] => plat
                [valeurs] => Array
                    (
                        [0] => boeuf
                        [1] => veau
                        [2] => saumon
                    )
     
            )
     
    )
    Alors il faut exploiter la fonction explode() http://php.net/manual/fr/function.explode.php

    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
    16
    17
    18
    19
    20
    21
    22
    <?php
    $chaine='fichier.php?dessert=tarte_fruit_yaourt&entree=concombre_pate_oeufmimosa&plat=boeuf_veau_saumon';
    $temp=explode('?',$chaine);
    //$temp[1]=>'dessert=tarte_fruit_yaourt&entree=concombre_pate_oeufmimosa&plat=boeuf_veau_saumon';
    $trucs=explode('&',$temp[1]);
    //$trucs[0]=>dessert=tarte_fruit_yaourt
    //$trucs[1]=>entree=concombre_pate_oeufmimosa
    //$trucs[2]=>plat=boeuf_veau_saumon
    $i=0;
    $results=array();
    foreach($trucs as $truc){
       $machins=explode('=',$truc);
       //$machins[0]=>dessert
       //$machins[1]=>=tarte_fruit_yaourt
       $results[$i]['champ']=$machins[0];
       $bidules=explode('_',$machins[1]);
       $results[$i]['valeurs']=$bidules;
       $i++;
    }
    echo '<pre>';
    print_r($results);
    echo '</pre>';

  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
    Ou plus simple encore !
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Array
    (
        [dessert] => Array
            (
                [0] => tarte
                [1] => fruit
                [2] => yaourt
            )
     
        [entree] => Array
            (
                [0] => concombre
                [1] => pate
                [2] => oeufmimosa
            )
     
        [plat] => Array
            (
                [0] => boeuf
                [1] => veau
                [2] => saumon
            )
     
    )
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <?php
    $chaine='fichier.php?dessert=tarte_fruit_yaourt&entree=concombre_pate_oeufmimosa&plat=boeuf_veau_saumon';
    $temp=explode('?',$chaine);
    //$temp[1]=>'dessert=tarte_fruit_yaourt&entree=concombre_pate_oeufmimosa&plat=boeuf_veau_saumon';
    $trucs=explode('&',$temp[1]);
    //$trucs[0]=>dessert=tarte_fruit_yaourt
    //$trucs[1]=>entree=concombre_pate_oeufmimosa
    //$trucs[2]=>plat=boeuf_veau_saumon'
    $i=0;
    $results=array();
    foreach($trucs as $truc){
       $machins=explode('=',$truc);
       //$machins[0]=>dessert
       //$machins[1]=>=tarte_fruit_yaourt
       $bidules=explode('_',$machins[1]);
       $i=0;
       foreach($bidules as $bidule){
          $results[$machins[0]][$i]=$bidule;
          $i++;
       }
    }
    echo '<pre>';
    print_r($results);
    echo '</pre>';

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 888
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 888
    Points : 6 632
    Points
    6 632
    Par défaut
    En fait il récupère déjà la valeur de chaque paramètre via $_GET. fichier.php?champ=nomduchamp_idligne_idsimulation&........... est la fin de l'URL de sa page, pas une chaîne à parser, donc il suffit juste d'utiliser explode() sur la valeur du champ.

    En ce qui concerne les œufs mimosa, doit-on mettre du persil ou de l'estragon?

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


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php
    list( $nomduchamp, $idligne, $idsimulation ) = explode( '_', $_GET['champ']);
    Ou plus complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $champs = ( !empty($_GET['champ']) )? explode( '_', $_GET['champ']) : '';
    $nomduchamp = $idligne = $idsimulation = '';
    if( count($champs) == 3 ){
       list( $nomduchamp, $idligne, $idsimulation ) = $champs;
    } elseif( count($champs) == 2 ){
       list( $nomduchamp, $idligne ) = $champs;
    } else {
       list( $nomduchamp ) = $champs;
    }

  7. #7
    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
    Citation Envoyé par CosmoKnacki Voir le message
    En ce qui concerne les œufs mimosa, doit-on mettre du persil ou de l'estragon?
    Persil !!!
    Pouah, l'estragon, c'est comme la cannelle, l'aneth, le patchouli ou le parfum "Miracle"... Une goutte de trop et ça te colle pendant une semaine.
    Le persil, l'ail, la noix de muscade ou la vanille, la classe, jamais entêtant, juste subtil.
    A part ça j'avais encore rien compris...
    Mais les fonctions sur chaîne sont tellement amusantes.

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Il est possible de remplacer avantageusement tout ce code
    Citation Envoyé par jreaux62 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $champs = ( !empty($_GET['champ']) )? explode( '_', $_GET['champ']) : '';
    $nomduchamp = $idligne = $idsimulation = '';
    if( count($champs) == 3 ){
       list( $nomduchamp, $idligne, $idsimulation ) = $champs;
    } elseif( count($champs) == 2 ){
       list( $nomduchamp, $idligne ) = $champs;
    } else {
       list( $nomduchamp ) = $champs;
    }
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $champs = empty($_GET['champ']) ? [] : explode('_', $_GET['champ']);
    list($nomduchamp, $idligne, $idsimulation) = $champs + ['', '', ''];
    qui produira exactement le même résultat.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Je ne connaissais pas cette possibilité de syntaxe.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Super merci a tous pour votre aide,

    Ce code est parfait et tellement plus propre que le mien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $champs = empty($_GET['champ']) ? [] : explode('_', $_GET['champ']);
    list($nomduchamp, $idligne, $idsimulation) = $champs + ['', '', ''];
    Par contre personne n'a jamais essayé les œufs au pesto ?? hummmmmm

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 06/03/2008, 15h12
  2. tansformer des chifres a une chaine de caractere
    Par maili20 dans le forum SQL
    Réponses: 1
    Dernier message: 04/12/2007, 11h22
  3. Réponses: 7
    Dernier message: 18/07/2006, 14h56
  4. Réponses: 2
    Dernier message: 21/05/2006, 19h31
  5. Réponses: 3
    Dernier message: 31/01/2005, 23h18

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