2011-07-23 2 views
1

J'essaie d'obtenir une fonction de tri simple en utilisant des fonctions anonymes. Un chacun pour le tri asc et desc.Rendu une variable lors de la création de la fonction PHP anonyme

Est-il possible de rendre la $ sortBy variables tout de suite lorsque la fonction est créée, mais qui ont encore $ x et $ y passé quand appelé plus tard? Je veux être en mesure de transmettre dynamiquement une clé lors de la création de ceux-ci.

$sortBy = 'some_key'; 

// descending 
$sort['desc'] = function($x, $y) { 
    if($x['data'][$sortBy] == $y['data'][$sortBy]) 
    return 0; 

    return ($x['data'][$sortBy] > $y['data'][$sortBy]) ? -1 : 1; 
}; 

uasort($arrayToSort, $sort[$order]); 

EDIT: Je passe ce tableau comme à uasort param().

Répondre

3

Vous pouvez passer une variable à enfermer la portée en utilisant la use keyword (Example #3 Closures and scoping):

$sortBy = 'some_key'; 

$sort['desc'] = function($x, $y) use ($sortBy) { 
    // implementation 
}; 
+1

Je ne savais pas que cela était possible. Merci! – Failpunk

Questions connexes