我想在compare_by_flags函数中使用这个$ sort_flags数组,但我没有找到解决方法,是否可能?
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 :(得分:7)
如果你使用php< 5.3然后你可以使用实例变量:
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
}
否则 - 使用闭包:
public function sort_by_rank(array $sort_flags = array()) {
uasort($this->search_result_array, function($a, $b) use ($sort_flags) {
// your comparison
});
}
答案 1 :(得分:2)
您没有通过传递$sort_flags
变量来提及您想要实现的目标,但您可能会发现我的this answer有用(无论是现在还是作为示例,如果您想实现不同的东西)。
答案 2 :(得分:-1)
您可以将其设置为类静态属性,如下所示:
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 }
从PHP 5.3开始,你也可以尝试这个。
uasort($array, function($a, $b) { self::compare_by_flags($a, $b, $sort_flags); });