2011-09-12 34 views
6

我希望在compare_by_flags函數中有這個$ sort_flags數組,但我沒有找到辦法解決這個問題,有可能嗎?如何添加其他參數到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

你使用什麼PHP版本? – zerkms

+0

5.2,但很快就會升級 – Riesling

回答

7

的你可以使用實例變量:

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 
    }); 
} 
+0

謝謝,使用第一種方法,並會盡快切換我們升級php – Riesling

-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那就試試這個,因爲PHP 5.3

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

只要匿名函數變量作用域不知道'$ sort_flags'是什麼,這個確切的代碼將不起作用。 – zerkms

2

你不提,你想傳遞$sort_flags變量來實現的,但你可能會發現我的this answer有用的(無論是因爲它的立場,或者如果你一個例子想要實現不同的東西)。