2011-09-12 15 views
6

Mi piacerebbe avere questo array $ sort_flags disponibile nella funzione compare_by_flags, ma non ho trovato un modo per farlo, è possibile?Come aggiungere parametri aggiuntivi alla funzione usort/uasort cmp?

public function sort_by_rank(array $sort_flags = array()) { 
    uasort($this->search_result_array, array($this, 'compare_by_flags')); 
} 

private static function compare_by_flags($a, $b) { 
    // I want to have this $sort_flags array here to compare according to those flags  
} 
+0

Quale versione di php usi? – zerkms

+0

5.2, ma aggiornerà presto – Riesling

risposta

7

Se si utilizza php < 5.3 poi puoi semplicemente utilizzare variabili di istanza:

public function sort_by_rank(array $sort_flags = array()) { 
    $this->sort_flags = $sort_flags; 
    uasort($this->search_result_array, array($this, 'compare_by_flags')); 
} 

private static function compare_by_flags($a, $b) { 
    // I want to have this $sort_flags array here to compare according to those flags  
} 

altrimenti - uso dispositivi di chiusura

public function sort_by_rank(array $sort_flags = array()) { 
    uasort($this->search_result_array, function($a, $b) use ($sort_flags) { 
     // your comparison 
    }); 
} 
+0

grazie, utilizzando il primo approccio e cambieremo non appena aggiorneremo php – Riesling

-1

È possibile impostare come proprietà statica della classe, in questo modo:

 
public function sort_by_rank(array $sort_flags = array()) { 
    self::$_sort_flags = $sort_flags; 
    uasort($this->search_result_array, array($this, 'compare_by_flags')); 
} 

private static function compare_by_flags($a, $b) { 
    // Read self::$_sort_flags 
    // I want to have this $sort_flags array here to compare according to those flags  
} 

Inoltre si potrebbe provare questo, come di PHP 5,3

 
uasort($array, function($a, $b) { 
    self::compare_by_flags($a, $b, $sort_flags); 
}); 
+0

Questo codice esatto non funzionerà, purché l'ambito della variabile di funzione anonima non abbia idea di cosa sia '$ sort_flags'. – zerkms

2

Lei non parlare di quello che si vuole raggiungere, passando la variabile $sort_flags, ma si potrebbe trovare this answer mio utile (sia così com'è, o come un esempio se si voglio raggiungere qualcosa di diverso).

Problemi correlati