2011-09-12 5 views
6

Me gustaría tener este $ sort_flags array disponible dentro de la función compare_by_flags, pero no encontré la forma de hacerlo, ¿es posible?¿Cómo agregar parámetros adicionales a la función cmp de usort/uasort?

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

¿Qué versión de php usas? – zerkms

+0

5.2, pero se actualizará pronto – Riesling

Respuesta

7

Si utiliza php < 5.3 a continuación, solo puede usar variables de instancia:

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  
} 

lo contrario - los cierres de uso:

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

gracias, usando el primer enfoque y cambiará tan pronto como actualicemos php – Riesling

-1

También podemos establecer como propiedad estática de clase, así:

 
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  
} 

También usted podría intentar esto, a partir de PHP 5,3

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

Este código exacto no funcionará, siempre que el alcance de la variable de función anónima no tenga idea de qué es '$ sort_flags'. – zerkms

2

usted no menciona lo que quiere lograr al pasar la variable $sort_flags, pero podría encontrar this answer mío útil (ya sea en su forma actual, o como un ejemplo si quiero lograr algo diferente).

Cuestiones relacionadas