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

Réponse
 
Outils de la discussion
Vieux 30/09/2008, 13h45   #1 (permalink)
Rédacteur
 
Avatar de Maljuna Kris
 
Date d'inscription: novembre 2005
Localisation: Plomodiern Bretagne France
Âge: 57
Messages: 1 566
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 déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/09/2008, 21h08   #2 (permalink)
Modérateur
 
Avatar de mathieu
 
Date d'inscription: juin 2003
Messages: 4 699
Par défaut

tu peux passer les informations par le nom d'une méthode dynamique par exemple

un exemple :
Code :
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 :
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
Vieux 30/09/2008, 23h01   #3 (permalink)
Rédacteur
 
Avatar de Maljuna Kris
 
Date d'inscription: novembre 2005
Localisation: Plomodiern Bretagne France
Âge: 57
Messages: 1 566
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.
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 01/10/2008, 09h29   #4 (permalink)
Rédacteur/Modérateur
 
Avatar de Eusebe
 
Date d'inscription: mars 2006
Localisation: Aude
Âge: 31
Messages: 1 877
Par défaut

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
Vieux 01/10/2008, 11h37   #5 (permalink)
Rédacteur
 
Avatar de Maljuna Kris
 
Date d'inscription: novembre 2005
Localisation: Plomodiern Bretagne France
Âge: 57
Messages: 1 566
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
Maljuna Kris est déconnecté   Envoyer un message privé Réponse avec citation
NEWS PHPFAQ PHPCOURS PHPSOURCES PHPLIVRES PHPSCRIPTS PHPOUTILS PHPCOMPARATIFSZend Framework

Réponse

Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h11.


Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2009 www.developpez.com - Legal informations.