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 :

Filtrer un affichage au moyen d'une expression regulière en PHP


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 92
    Points : 61
    Points
    61
    Par défaut Filtrer un affichage au moyen d'une expression regulière en PHP
    Bonjour,

    Je souhaite filtrer un tableau d'objet json en PHP par une expression regulière

    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
     
     
    $arr = array(
        array(
            "region" => "valore1",
            "price" => "valore11",
            "state" => "declare par /AMG/OMS/FRA/"
        ),
        array(
            "region" => "valore2",
            "price" => "valore22",
            "state" => "declare par /AMG/OMS/ALTS/"
        ),
        array(
            "region" => "valore4",
            "price" => "valore44",
            "state" => "declare par /AMG/OMS/FRA/"
        ),
      array(
            "region" => "valore5",
            "price" => "valore55",
            "state" => "declare par /AMG/OMS/ALTS/"
        ),
        array(
            "region" => "valore3",
            "price" => "valore33",
            "state" => "declare par /AMG/OMS/ALTS/PT"
        )
    );
     
    $myJsonArray = json_encode($arr);
     
    echo $myJsonArray;
    je souhaite trouver une expresion regulière qui filtre ce tableau et ne me retourne qu'un tableau contenant les objets ayant un state contenant "/ALTS".

    quelqu'un a une idée ?

  2. #2
    Membre averti
    Avatar de Sparky95
    Homme Profil pro
    Full Stack (web) developer
    Inscrit en
    Décembre 2016
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Full Stack (web) developer
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2016
    Messages : 383
    Points : 367
    Points
    367
    Par défaut
    Bonsoir,
    Sauf erreur de ma part l'expression régulière ne pourra te créer le tableau il faudrait donc d'après moi utiliser une boucle et ton expression régulière.
    L'idée serrait donc
    tu parcours chaque tableau et tu fais agir ton expression régulière sur la valeur de la clé de state
    dans le cas ou la réponse est positive => tu l'enregistre dans ton nouveau tableau les données que tu veux enregistrer
    sinon tu passes à la suite
    bonne soirée

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Pas besoin de regex pour faire ca :


    * Creer une fonction "filtrer" :
    Elle prendra en paramètre un élément de ton tableaux (donc un tableau)
    Elle utilise strpos() pour savoir si l'élément state du tableau reçu en paramètre contient 'ALTS'
    Elle retourne le tableau recu en paramètre si c'est le cas

    * Utilise array_map() pour appeler ta fonction "filtrer" sur chaque élément de ton tableau d'origin
    * Applique un array_filter() sur le resultat d'array map
    * Tu obtiens un tableau avec uniquement les élément contenant 'ALTS'

  4. #4
    Membre averti
    Avatar de Sparky95
    Homme Profil pro
    Full Stack (web) developer
    Inscrit en
    Décembre 2016
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Belgique

    Informations professionnelles :
    Activité : Full Stack (web) developer
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2016
    Messages : 383
    Points : 367
    Points
    367
    Par défaut
    Haaa nickel j'aurai moi même appris des choses car je ne connaissais pas ces fonctions.
    Merci grunk

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    92
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 92
    Points : 61
    Points
    61
    Par défaut
    salut tout le monde,

    j'ai pu trouver la solution de cette manière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $tableauFiltre= [];
    $termTrouve= '/ALTS/';
     
    foreach($arr as $key => $valTab)
    {
      if(strpos($valTab['state'], $termTrouve) !== false) {
        $tableauFiltre[] = $valTab;
      }
    }
    merci pour votre aide avec la fonction strpos, je vais fermer la discussion.

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    La solution que je proposais dans mon premier message était un peu plus concise (on évite le foreach) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function filter($subarr) {
        if (strpos($subarr['state'], 'ALTS') !== false)
        	return $subarr;
    }
    $alts = array_filter(array_map('filter', $arr));
    Mais l'important et d'avoir trouvé la solution et d'être à l'aise avec

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/11/2007, 16h04
  2. [RegEx] Aide sur une expression regulière
    Par zulkifli dans le forum Langage
    Réponses: 1
    Dernier message: 13/03/2007, 16h02
  3. Contraire d'une Expression regulière
    Par aristeas dans le forum Langage
    Réponses: 5
    Dernier message: 08/11/2006, 13h27
  4. [RegEx] aide pour une expression regulière
    Par hugo123 dans le forum Langage
    Réponses: 5
    Dernier message: 24/11/2005, 16h41
  5. ET dans une expression regulière
    Par kesako dans le forum Langage
    Réponses: 4
    Dernier message: 10/11/2005, 13h57

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