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 :

Comparer 2 tableaux associatifs mais uniquement sur certaines clés


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 391
    Points : 863
    Points
    863
    Par défaut Comparer 2 tableaux associatifs mais uniquement sur certaines clés
    bonjour,

    j'ai deux variables qui sont des tableaux associatifs : $args["rsold"] et $args["rsnew"] .
    je cherche à savoir si ils sont différents MAIS uniquement sur les clés (nom de champ) qui contiennent le mot 'grp'

    par exemple :

    mon 1er tableau
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $args["rsold"]["meteo"]="il pleut";
    $args["rsold"]["etu_grp1_id"]=11;
    $args["rsold"]["etu_grp2_id"]=22;
    $args["rsold"]["maj"]="2023";

    mon second tableau :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $args["rsnew"]["etu_grp1_id"]=11;
    $args["rsnew"]["etu_grp2_id"]=22;
    $args["rsnew"]["lib"]="2023";
    $args["rsnew"]["nom"]="toto";

    On voit bien que les champs de grp1 et grp2 sont identiques dans les 2 tableaux même si les deux tableaux ont des champs en plus. c'est cette "égalité" des champs-valeurs "grp" que je cherche à déterminer.

    il existe la fonction php array_intersect et array_intersect_assoc mais elles ne permettent pas de "choisir" ni filtrer les clés de comparaisons.
    J'aimerai pouvoir dire aux fonctions intersect : "si la clé contient pas le mot 'grp', alors ne la compare pas.
    y-a-t-il un moyen de faire ça ? j'ai vu qu'il y a la fonction array_intersect_uassoc qui permet de travailler la comparaison avec une fonction perso, mais cette dernière ne travaille que sur la valeur et non pas sur le nom de la clé.... donc je suis coincé....

    avez-vous une idée ?

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    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 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Tu peux filtrer les clés et comparer les tableaux résultants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $key_contains_grp = fn($key) => str_contains($key, '_grp');
     
    var_dump(
        array_filter($args['rsold'], $key_contains_grp, ARRAY_FILTER_USE_KEY)
        ===
        array_filter($args['rsnew'], $key_contains_grp, ARRAY_FILTER_USE_KEY)
    ); // bool(true)
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 391
    Points : 863
    Points
    863
    Par défaut
    je ne comprends pas cette partie de code, c'est quoi ? du php8 ?

    fn est un mot clé ou une fonction qui doit être écrite ?

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Fonction fléchée, introduite avec PHP 7.4
    => https://www.php.net/manual/fr/functions.arrow.php
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    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 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Effectivement, un des intérêts des fonctions flêchées est de pouvoir renvoyer le résultat d'une simple expression comme ici sans même avoir à taper le mot return (la flêche faisant office de).
    Par contre str_contains a elle été introduite en PHP 8 et renvoie un booléen. Elle n'a pas l'ambiguïté de strpos dans le cas d'un simple test de présence, qui peut renvoyer la position 0 ou false, et oblige à faire une comparaison stricte avec false.
    On peut aussi écrire pour les versions plus anciennes de PHP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $key_contains_grp = function($key) { return strpos($key, '_grp') !== false; };
    Voire même, nommer la fonction et ne pas passer par une variable.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/10/2021, 07h22
  2. Réponses: 1
    Dernier message: 20/08/2015, 18h03
  3. [WD-2010] Supprimer un pied de page uniquement sur certaines pages
    Par Florent06 dans le forum Word
    Réponses: 5
    Dernier message: 31/05/2011, 13h44
  4. Affihage d'une page différente sur IE8 mais uniquement sur seven
    Par Paul TOTH dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 31/03/2010, 14h42
  5. Restaurer un back up mais que sur certaines tables
    Par John_attend dans le forum Débuter
    Réponses: 0
    Dernier message: 28/03/2008, 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