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 :

Différence entre deux tableaux d'objets (array_diff_uassoc) [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Expert éminent
    Avatar de shawn12
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2006
    Messages
    3 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2006
    Messages : 3 368
    Points : 6 800
    Points
    6 800
    Par défaut Différence entre deux tableaux d'objets (array_diff_uassoc)
    En PHP 5, j'ai deux tableaux contenant des objets de la classe Competence et je voudrais soustraire l'un à l'autre.

    J'utilise la syntaxe suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $autres  = array_diff_uassoc($allCompetences, $listeCompetences, array($allCompetences, 'hasEqualMapping'));
    Dans ma classe Competence, j'ai une méthode d'objet déclarée comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function hasEqualMapping($uneCompetence) {
    Mais cela ne fonctionne pas. Quel est le problème ? Et comment le résoudre ?

  2. #2
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Salut,

    Je pense que ton problème viens de la façon dont tu appels ta fonction de callback :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $autres  = array_diff_uassoc($allCompetences, $listeCompetences, array($allCompetences, 'hasEqualMapping'));
    Il faudrait faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $autres  = array_diff_uassoc($allCompetences, $listeCompetences, array('Competence', 'hasEqualMapping'));
    Mais dans ce cas ci la fonction hasEqualMapping devrait être statique.

    Ou alors faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $comp = new Competence();
    $autres  = array_diff_uassoc($allCompetences, $listeCompetences, array($comp, 'hasEqualMapping'));
    Voir la doc PHP sur les callback : http://fr.php.net/manual/fr/language...types.callback

    Une fonction PHP est passée par son nom, comme une chaîne. N'importe quelle fonction interne ou définie par l'utilisateur peut être passée, excepté les constructeurs de langage comme : array(), echo(), empty(), eval(), exit(), isset(), list(), print() ou unset().

    Une méthode d'un objet instancié est passée comme étant un tableau, contenant un objet à l'index 0 et le nom de la méthode à l'index 1.

    Les méthodes de classe statique peuvent également être passées sans instanciation de l'objet, en passant le nom de la classe au lieu de l'objet à l'index 0.

  3. #3
    Expert éminent
    Avatar de shawn12
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2006
    Messages
    3 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2006
    Messages : 3 368
    Points : 6 800
    Points
    6 800
    Par défaut
    Merci pour ta réponse francoisIT
    Ma fonction de callback doit donc prendre deux paramètres alors ?
    Comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function hasEqualMapping($uneCompetence, $uneAutreCompetence) {

  4. #4
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Salut,

    Il faut mettre 2 paramètres.
    Et pour rappel au niveau du code de retour :

    La fonction de rappel à utiliser. Elle doit retourner un entier inférieur, égal ou supérieur à 0 si le première argument est considéré comme, respectivement, inférieur, égal ou supérieur au second paramètre.

  5. #5
    Expert éminent
    Avatar de shawn12
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2006
    Messages
    3 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2006
    Messages : 3 368
    Points : 6 800
    Points
    6 800
    Par défaut
    résolu, merci

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

Discussions similaires

  1. Mettre en rouge les différences entre deux tableaux
    Par Yobi1993 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 18/05/2013, 09h05
  2. Différence entre deux tableaux
    Par agh dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/04/2013, 09h52
  3. différence entre deux tableaux
    Par ledisciple dans le forum Langage
    Réponses: 11
    Dernier message: 29/04/2011, 19h52
  4. [Tableaux] Différence entre deux syntaxes
    Par baggie dans le forum Langage
    Réponses: 23
    Dernier message: 30/04/2008, 15h05
  5. Résultats erroné différence entre deux types TDateTime
    Par Alghero dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/03/2004, 18h03

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