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 :

Utilisation de la fonction explode


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Par défaut Utilisation de la fonction explode
    Bonjour,

    j'ai un probleme avec le fonction "explode" l'exmple ci-dessous fonctionne très bien, j'ai bien un array de 3 lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $chaine = 'SVM_DOM1 Partage_privé /V_PRIVE';
    $array = explode(" ", $chaine);
    mais avec chaine suivante j'obtiens un array de 4 lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SVM_DOM2 "Partage Public" /V_PUBLIC
    comment faire pour ignorer l'espace qui se trouve entre les " ?

    Quelqu'un a une idée ?

    Merci
    Cirvent

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut
    Ca a l'air proche de ce que tu cherches...

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    $chaine = 'SVM_DOM2 "Partage Public" /V_PUBLIC';
    $array = explode('"', $chaine);
    var_dump($array);
    ?>

  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 : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Disons qu'il y a des méthodes très compliquées avec des regex et des fonctions callback.

    Je te propose plutôt ça :

    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
    <?php
    $chaine='SVM_DOM2 "Partage Public" /V_PUBLIC';
     
    $new_chaine='';
    $chars=str_split($chaine);
    $dans_guillemets=false;
    foreach($chars as $char){
      if($char=='"' && $dans_guillemets==false){
        $new_chaine.=$char;
        $dans_guillemets=true;
      }
      elseif($char=='"' && $dans_guillemets==true){
        $new_chaine.=$char;
        $dans_guillemets=false;
      }
      elseif($char==' ' && $dans_guillemets==true){
        //on ne copie pas;
      }
      else{
        $new_chaine.=$char;
      }  
    }
    echo $new_chaine;
    $temp=explode(' ',$new_chaine);
    echo '<pre>';
    print_r($temp);
    echo '</pre>';
    /*
    SVM_DOM2 "PartagePublic" /V_PUBLIC
    
    Array
    (
        [0] => SVM_DOM2
        [1] => "PartagePublic"
        [2] => /V_PUBLIC
    )
    
    */
    @Laurent, non, ta méthode ne peut pas marcher. Exemple, rajoute toto et tata à ta chaîne...
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

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

    avant de spéculer, il faudrait savoir :
    • quelles sont TOUTES les différentes formes que pourrait avoir la chaine ?
    • combien de morceaux doit-on récupérer ? Toujours 3 ? Plus ? Moins ?
    • ...


    Si on part du principe :
    • récupérer 3 éléments, séparés pas des espaces
    • 1er et dernier éléments sans espaces ni "
    • élément central avec ou sans ", mais espace(s) possibles

    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
    // ------------------
    function get_3_strings($chaine)
    {
    	$arr = explode(' ',$chaine);
    	$str[2] = $arr[count($arr)-1]; // dernier
    	unset($arr[count($arr)-1]);
    	$str[0] = $arr[0]; // premier
    	unset($arr[0]);
    	$str[1] = trim(implode(' ',$arr), '"'); // le reste, sans "
    	return $str;
    }
    // ---------
    $chaine = 'SVM_DOM1 Partage_privé /V_PRIVE';
    var_dump( get_3_strings($chaine) );
    // ---------
    $chaine = 'SVM_DOM2 "Partage Public" /V_PUBLIC';
    var_dump( get_3_strings($chaine) );
    // ---------
    $chaine = 'RED_CAP "Promenons-nous dans les bois" /BAD_WOLF';
    var_dump( get_3_strings($chaine) );
    ?>
    On obtient bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    array (size=3)
      0 => string 'SVM_DOM1' (length=8)
      2 => string '/V_PRIVE' (length=8)
      1 => string 'Partage_privé' (length=14)
     
    array (size=3)
      0 => string 'SVM_DOM2' (length=8)
      2 => string '/V_PUBLIC' (length=9)
      1 => string 'Partage Public' (length=14)
     
    array (size=3)
      0 => string 'RED_CAP' (length=7)
      2 => string '/BAD_WOLF' (length=9)
      1 => string 'Promenons-nous dans les bois' (length=28)

    @Dendrite
    L'exemple de Laurent ne fonctionne déjà pas avec le 1er exemple de chaine...
    Dernière modification par Invité ; 03/01/2020 à 18h19.

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    Billets dans le blog
    12
    Par défaut
    salut,

    bien que les regex, ce n'est pas franchement ma tasse de thé, je pense que sur ce coup, il n'y a qu'un regex qui puisse résoudre la problématique simplement, bon j'y suis allé à tâtons, je propose : \s+(?=([^"]*"[^"]*")*[^"]*$).
    Si CosmoKnacki pouvait me corriger et même améliorer le pattern

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Par défaut
    Bonjour,

    Merci à vous tous pour vos réponses,

    la solution de jreaux62, répond parfaitement à mon besoin,

    Merci pour votre aide.

    Cirvent

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Est-ce qu'on ne pourrait pas considérer ça comme une ligne de CSV, mais avec l'espace comme séparateur ? Auquel cas str_​getcsv ferait très bien ça tout seul.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/12/2012, 18h35
  2. Tri après l'utilisation de la fonction "explode"
    Par celinedecham dans le forum Langage
    Réponses: 7
    Dernier message: 04/10/2008, 20h40
  3. Utilisation de la fonction de déploiement
    Par mchicoix dans le forum XMLRAD
    Réponses: 4
    Dernier message: 01/03/2005, 14h35
  4. Utilisation de la fonction qsort
    Par Jsmeline dans le forum C
    Réponses: 8
    Dernier message: 28/01/2005, 12h40
  5. [LG]librairies : utiliser seulement quelques fonctions
    Par wwwroom dans le forum Langage
    Réponses: 13
    Dernier message: 14/05/2004, 22h50

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