Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 30/09/2008, 13h45   #1
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Inscription : novembre 2005
Messages : 2 425
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 425
Points : 3 226
Points : 3 226
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 :
usort($tableau,'callback');
.
Il y a bien la piste d'un array GLOBAL....

Dernière modification par Maljuna Kris ; 30/09/2008 à 15h54.
Maljuna Kris est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2008, 21h08   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 464
Points : 4 464
tu peux passer les informations par le nom d'une méthode dynamique par exemple

un exemple :
Code :
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 :
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
        )

)
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2008, 23h01   #3
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Inscription : novembre 2005
Messages : 2 425
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 425
Points : 3 226
Points : 3 226
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.
Maljuna Kris est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2008, 09h29   #4
Expert Confirmé
 
Avatar de Eusebe
 
Inscription : mars 2006
Messages : 1 989
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mars 2006
Messages : 1 989
Points : 3 607
Points : 3 607
Bonjour,

Des explications sur les possibilités pour les fonctions callback dans la doc de php : http://php.net/callback
Eusebe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/10/2008, 11h37   #5
Expert Confirmé
 
Avatar de Maljuna Kris
 
Homme Avcxjo MoKo
Inscription : novembre 2005
Messages : 2 425
Détails du profil
Informations personnelles :
Nom : Homme Avcxjo MoKo
Âge : 60

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : novembre 2005
Messages : 2 425
Points : 3 226
Points : 3 226
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
Maljuna Kris est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 12h20.


 
 
 
 
Partenaires

Hébergement Web