2010-09-24 5 views
2

Longue histoire courte, j'ai besoin de trier un tableau d'objets en utilisant usort, et je dois dire usort quels champs dans les objets à trier.Utiliser PHP usort avec des résultats conditionnels

La solution évidente est de créer des dizaines de fonctions de tri usort séparées, mais cela semble sorte de redondant et moche. La plupart du temps, les objets seront triés par entrée de $ _GET, mais pas toujours, donc je ne veux pas trier directement les variables $ _GET.

Est-il possible pour la fonction usort d'utiliser la fonction de tri de la classe actuelle? Quelque chose comme ça

<?php 

    class myClass 
    { 
     public $myArray; 
     private $by; 

     public function filter($by) 
     { 
      $this->by = $by; 
      usort($this->myArray, /* Somehow point to the following function: */); 
     } 

     private function srt($a, $b) 
     { 
      $c = $this->by; // <- reaching a third variable 

      // ... 
     } 
    } 

?> 

Répondre

2

Oui, passez un tableau de l'objet et le nom de la méthode à usort():

usort($this->myArray, array($this, 'srt')); 

EDIT: Je l'ai testé et trouvé que cela fonctionne avec des méthodes privées comme tant que vous appelez usort() dans la même classe qui contient la méthode privée.

+0

+1. Très bonne idée. – pltvs

Questions connexes