如何在usort / uasort cmp函数中添加其他参数?

时间:2011-09-12 12:05:23

标签: php

我想在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      
}

3 个答案:

答案 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);
});