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 :

Suppression Array Liste


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    L3 Informatique
    Inscrit en
    Avril 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : L3 Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2020
    Messages : 29
    Points : 29
    Points
    29
    Par défaut Suppression Array Liste
    Bonjour,

    Je suis bloqué par rapport à l'avancement de mon projet. En clair, je souhaite supprimer des array qui comporte une variable particulière dans un ensemble dans mon sous array.

    Voici une ébauche de fonction qui ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        $data = array_filter($data, function ($x) {
            return $x['valeur'] != 'MOT';
        });
    Par exemple dans ce cas, lorsque valeur contient la valeur 'MOT1 MOT2' ou 'MOT1', alors on supprime l'array en question.

    J’espère que vous pourrez m'aider,

    Merci,

    PS : Comment faire différent de avec cet API ?

    Nom : operands.jpg
Affichages : 306
Taille : 4,1 Ko

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    Par exemple dans ce cas, lorsque product_1002 contient la valeur 'M-NOBAR NONO' ou 'M-NOBAR',
    alors on supprime l'array en question.
    Autrement dit tu conserves les entrées dont product_1002 est différent de "M-NOBAR NONO" et "M-NOBAR", ce qui donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $data = array_filter($data, function($entry) {
        return ($entry['product_1002'] !== 'M-NOBAR MONO') && ($entry['product_1002'] !== $entry['M-NOBAR']);
    });
    Que l'on peut aussi écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $data = array_filter($data, fn($entry) => !in_array($entry['product_1002'], ['M-NOBAR NONO', 'M-NOBAR']));


    PS : Comment faire différent de avec cet API ?
    Quelle API ? En PHP "différent de" est "!=" ou "!==" (vérif du type)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    L3 Informatique
    Inscrit en
    Avril 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : L3 Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2020
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    Je viens de me rendre compte du problème !

    Lorsque j'utilise votre méthode j'ai pu constater, que malgré la condition certains éléments persistaient. Cela est dû à la présence d'espaces avant ou après le mot clef, comment puis-je m'en astreindre sans avoir à toucher à mon fichier contenant les données ?

    De même, votre méthode bien qu'excellente ne prend pas en compte l'utilisation de plusieurs mots-clefs. Par cela, je veux dire que si j'entre 'MOT1' et 'MOT2' alors, je ne souhaite pas filtrer la suite des mots 'MOT1 MOT2', mais chaque mot. Ainsi, lorsque je rentre une variable ou plusieurs je souhaite que l'ensemble des array contenant cette variable soit exclu.

    Un petit exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [valeur] => 'MOT1 MOT2'
    : Si j'entre 'MOT2', alors l'array ici présent doit aussi être éliminé.

    J'essaie d'être le plus clair possible, j'espère que vous comprenez ou je veux en venir.

    Concernant les espaces, j'ai résolu le problème avec un simple , mais j'ai encore du mal pour l'utilisation de plusieurs variables (peut-être strpos()).

    Merci de votre aide.

    PS : Concernant l'API seul les opérateurs de la photo sont valides, bien que j'ai essayé !=

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    L3 Informatique
    Inscrit en
    Avril 2020
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : L3 Informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2020
    Messages : 29
    Points : 29
    Points
    29
    Par défaut
    Voila la solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        $result = array_filter($data, function ($item) use ($value) {
            return (stripos($item['valeur'], $value) === false);
        });
    Le problème maintenant, est de savoir comment faire plusieurs comparaisons pour plusieurs critères.

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 912
    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 912
    Points : 6 705
    Points
    6 705
    Par défaut
    S'il s'agit de mots (des chaînes ne contenant aucun espace), c'est assez simple:
    • tu crées un tableau avec les mots en question (en minuscule): $blacklist = ['mot1', 'mot2', 'mot3']; // etc.
    • Dans la function passée en paramètre de array_filter, tu convertis la chaîne $item['valeur'] en minuscule puis tu la sépares en un tableau à l'aide d'explode() ou de preg_split() voire preg_match_all().
    • Puis tu utilises array_intersect() avec le tableau obtenu et $blacklist: si le tableau issu de cette intersection est non-vide, c'est qu'un des mots de $item['valeur'] est dans $blacklist (et vice et versa).
    • Pour ce qui est du retour de la fonction, tu peux utiliser empty() pour contrôler ce tableau issu de l'intersection. Tu peux également t'en passer car d'une manière non-stricte, un tableau vide est équivalent à false et un tableau non-vide est équivalent à true.

Discussions similaires

  1. Réponses: 7
    Dernier message: 26/04/2007, 19h05
  2. [VB.net] Join d'un Array list de string?
    Par the_bmo dans le forum VB.NET
    Réponses: 8
    Dernier message: 15/12/2005, 14h53
  3. Vertex Array & Listes d'Affichage ...
    Par yagero dans le forum OpenGL
    Réponses: 3
    Dernier message: 18/09/2005, 19h32
  4. Pb ajouter/suppression élément liste
    Par jerome38000 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 05/09/2005, 16h54

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