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 :

[Tableaux] usort : passer des paramètres à la fonction de callback


Sujet :

Langage PHP

  1. #1
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut [Tableaux] usort : passer des paramètres à la fonction de callback
    Saluton,
    Tout est dans le titre ou presque.
    J'aimerais pouvoir passer en paramètres à la fonction callback requise par usort la liste des colonnes un peu comme on le fait avec ORDER BY en SQL.
    Seulement je ne vois vraiment pas comment m'y prendre vu que la fonction est invoquée par son nom sous forme de string :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    usort($tableau,'callback');
    .
    Il y a bien la piste d'un array GLOBAL....
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    tu peux passer les informations par le nom d'une méthode dynamique par exemple

    un exemple :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    class TriDynamique
    {
        public function __call($nom, $arguments)
        {
            $tabNom = explode('-', $nom);
            // $tabNom[0] contient 'tri'
            // $tabNom[1] contient le nom de la clé à trier
     
            $valeur1 = $arguments[0][$tabNom[1]];
            $valeur2 = $arguments[1][$tabNom[1]];
     
            if ($valeur1 == $valeur2) {
                return 0;
            }
     
            return ($valeur1 < $valeur2) ? -1 : 1;        
        }
    }
     
    $triDynamique = new TriDynamique();
     
    $donnees = array(
        array(
            'nom' => 'Pierre',
            'age' => 24,
        ),
        array(
            'nom' => 'Paul',
            'age' => 28,
        ),
        array(
            'nom' => 'Jacques',
            'age' => 23,
        ),
    );
     
    echo "Données de départ : \n";
    print_r($donnees);
     
    echo "Tri suivant le nom : \n";
    uasort($donnees, array($triDynamique, 'tri-nom'));
    print_r($donnees);
     
    echo "Tri suivant l'age : \n";
    uasort($donnees, array($triDynamique, 'tri-age'));
    print_r($donnees);
    et le résultat :
    Code x : 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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    Données de départ :
    Array
    (
        [0] => Array
            (
                [nom] => Pierre
                [age] => 24
            )
    
        [1] => Array
            (
                [nom] => Paul
                [age] => 28
            )
    
        [2] => Array
            (
                [nom] => Jacques
                [age] => 23
            )
    
    )
    Tri suivant le nom :
    Array
    (
        [2] => Array
            (
                [nom] => Jacques
                [age] => 23
            )
    
        [1] => Array
            (
                [nom] => Paul
                [age] => 28
            )
    
        [0] => Array
            (
                [nom] => Pierre
                [age] => 24
            )
    
    )
    Tri suivant l'age :
    Array
    (
        [2] => Array
            (
                [nom] => Jacques
                [age] => 23
            )
    
        [0] => Array
            (
                [nom] => Pierre
                [age] => 24
            )
    
        [1] => Array
            (
                [nom] => Paul
                [age] => 28
            )
    
    )

  3. #3
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Merci beaucoup,
    Tout cela reste un peu magique pour moi, mais je vais m'y faire.
    La doc php n'est pas très prolixe en exemples un peu pointus sur les classements de tableaux. Et je n'aurai jamais deviné que usort() pouvait recevoir un tableau en deuxième argument.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  4. #4
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Des explications sur les possibilités pour les fonctions callback dans la doc de php : http://php.net/callback

  5. #5
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Encore merci.
    Dont acte, je pense qu'un lien vers cette partie spécifique de la doc dans les items concernés ne serait pas un luxe, car il n'est pas intuitif (et c'est un euphémisme) de la trouver sous la rubrique :Variables et pseudo-types utilisés dans cette documentation.
    Quoique callback soit (à la réflexion), un pseudo-type.

    Au temps pour moi, le lien existe.
    Je ne sais même plus où me cacher
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/10/2014, 00h25
  2. [Débutant] [ode15s] passer des paramètres à une fonction
    Par lecteur1001 dans le forum MATLAB
    Réponses: 6
    Dernier message: 09/07/2009, 16h02
  3. faire passer des paramètres pour fonction d'upload
    Par adeltimple dans le forum Langage
    Réponses: 10
    Dernier message: 16/02/2009, 18h56
  4. Passer des paramètres à une fonction dans before_filter
    Par abir84 dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 27/01/2008, 19h40
  5. Réponses: 2
    Dernier message: 21/07/2007, 01h12

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